2010-10-28 8 views
0

Je suis coincé avec l'analyse de texte dans android. Je dois lire un fichier texte à partir de l'URL et afficher le contenu dans une liste. Le contenu du fichier texte comprend des images et des textes qui sont séparés par des délimiteurs (comme ^, ~, |, ~^~^~). Comment puis-je supprimer les délimiteurs et afficher dans une liste avec l'aide de la classe de l'adaptateur de tableau? Quelqu'un peut-il aider avec le code?Analyse de texte en android

Répondre

0

Je pense que l'adaptateur de tableau peut être deux simpliste pour ce faire. Je veux dire que vous pourriez l'utiliser, mais cela finira par être plus compliqué que le problème global. Donc, je pense que vous pouvez comprendre comment analyser le fichier texte dans les objets texte et image (pour vous de définir). Ensuite, vous avez besoin d'un adaptateur. Il y a peu d'endroits avec des extraits de code. Je pense que SimpleAdapter pourrait bien fonctionner pour ce scénario.

Pour des raisons simplistes disons que vous avez une mise en page pour une ligne de la liste à la fois un ImageView et un TextView

layout.xml

<LinearLayout xmlns:android="..." 
android:layout_height="wrap_content" 
android:layout_width="fill_parent" 
> 
    <ImageView 
     android:id="@+id/image" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
    /> 
    <TextView 
     android:id="@+id/text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
    /> 
</LinearLayout> 

et maintenant nous avons besoin d'utiliser un adaptateur pour remplir

Ainsi, le constructeur est la viande de la classe pour les clients à utiliser.

SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) 

Donc, si vous allez avec l'hypothèse que le fichier est maintenant analysé et nous avons une liste d'objets

final Context context = ...; 
final ListView listView = ...; 
List<Object> objects = ...; 
List<Map<String, Object>> mappings = new ArrayList<Map<String, Object>>(objects.size()); 
for(Object o : objects) { 
HashMap<String, Object> data = new HashMap<String,Object>(); 
mappings.add(data); 
if (o instanceof Image) { 
    data.put("image", ((Image)o).getBitmap()); 
    data.put("text", ""); 
} else { 
    data.put("image", null); 
    data.put("text", String.valueOf(o)); 
} 
} 
SimpleAdapter adapter = new SimpleAdapter(context, mappings, R.layout.layout, new String[] { "image", "text"}, new int[] {R.id.image, R.id.text}); 
adapter.setViewBinder(new SimpleAdapter.ViewBinder() { 
    public boolean setViewValue (View view, Object data, String textRepresentation) { 
    if (data instanceof Bitmap && view instanceof ImageView) { 
     // This is the main reason for the ViewBinder 
     ImageView imageView = (ImageView) view; 
     imageView.setImageBitmap((Bitmap)data); 
     return true; 
     } else if (view instanceof TextView) { 
     TextView textView = (TextView)view; 
     textView.setText(textRepresenation); 
     return true; 
     } 
     return false; 
    } 
    }); 
listView.setAdapter(adapter); 

Maintenant, si vous avez besoin d'aide analyse le dossier, bien que vous devez fournir un meilleur description car un fichier texte avec un suppresseur ne semble pas suffisant pour marquer deux types de données différents.

Mais si c'est le cas et que vous avez de la mémoire, chargez-le simplement en tant que chaîne et diviser (suppresseur). Puis pour chaque item si vous décidez qu'il s'agit d'une String cool, conservez-la comme une chaîne et mettez-la dans la liste. Si vous décidez qu'il s'agit d'une image, décodez le bitmap et placez-le dans la liste. branchez cette liste dans la liste des objets dans le code ci-dessus et je pense que tout est réglé.

+0

Mon fichier texte contient des images qui sont sous la forme de code (par exemple 6468), suivi par délimiteur puis texte, délimiteur, tex, t et ainsi de suite .................................. Par exemple: abcd^2531 ~ abcdCity^2215 ~ abcd ~^~^~ 14: 00 HRS ~ abcd ~~ 2010101610531 ~ abcd ~ abcd ~ 6 ~ N ~ 20101016 ~ | abcd^6574 ~ abcd^7158 ~ abcd ~^~^~ 14: 00 HRS ~ Vieux abcd ~~ 2010101610854 ~ abcd ~ abcd ~ 6 ~ N ~ 20101016 ~ | Comment vais-je séparer les délimiteurs et les stocker dans une chaîne? .... J'ai essayé de nombreuses façons, mais je ne réussis pas. – snn

+0

Je suis désolé de ne pas comprendre le format que vous expliquez. Où est l'image ici? –

0

numéro à quatre chiffres qui sont, il y a les images ...... à savoir 2531, 2215, 6574, 7158.

+0

Plz oublier les images i thnk je vais garder les images statiques ....... Laissez-moi savoir comment je peux diviser tous ces délimiteurs ....... – snn