2010-11-21 2 views
0

J'ai un petit problème, et je ne le vois pas.JSonarray vers Arraylist et Arraylist dans ListAdapter ne fonctionne pas. (Dans Android)

Je récupère des données Json (le JSONArray) et je voulais faire un List de tous les noms dans le JSONArray, quelque chose comme ça.

List list = new ArrayList<String>(); 
for(int i=0;i < data.length();i++){ 
    list.add(data.getJSONObject(i).getString("names").toString()); 
} 

et je voulais profiter de cette liste dans un `ListView » donc je l'ai fait.

ArrayList<String> test = history_share.list; 
names_list = (String[]) test.toArray(); 
ArrayAdapter<String> adapter = new ArrayAdapter(this, 
    android.R.layout.simple_list_item_1, names_list); 
setListAdapter(adapter); 

(history_share est l'une des méthodes i créé pour prendre des données JSON d'une api Eclipse ne voit pas d'erreur, et moi non plus.

quelqu'un peut me aider s'il vous plaît?

+0

Que ne fonctionne pas? Quels messages d'erreur obtenez-vous? – Falmarri

+0

je n'ai rien qui est le problème, et quand je lance l'application android il fait un: "l'application a arrêter de manière inattendue" chose. – Tsunaze

+0

@Tsunaue: Il doit y avoir une sortie logcat pour cette exception. –

Répondre

0

Pourquoi vos méthodes ont underscores en leur nom? méthodes par convention Begi n avec une lettre minuscule. Par exemple myMethod(). Les noms de classes commencent par des majuscules comme MyClass. Vous devriez vous en tenir à cela.

Aussi history_share n'est pas une méthode de la façon dont vous avez posté votre code, plus vous ne serez pas en mesure de récupérer quelque chose d'une méthode en l'appelant ainsi.

Une méthode getter renvoie simplement le membre défini. Je suis très surpris qu'Eclipse ne le souligne pas. Êtes-vous sûr que la vérification des erreurs est activée? Nommer vos classes comme des classes déjà existantes est généralement une très mauvaise idée et cela devient encore pire si vous prévoyez d'utiliser la classe d'origine quelque part ou n'importe quelle classe dérivant cette classe. Dans la classe Connection originale, je ne peux pas repérer toute liste de membres statiques qui conduit à l'hypothèse que vous avez créé votre propre classe de connexion. Cela ne doit pas être le problème ici, mais cela peut poser des problèmes à l'avenir si vous continuez à faire cela.

+0

oui, et j'ai deux classes: Main.java et Connection.java, j'ai créé history_share comme ceci: Connection history_share = nouvelle connexion (url); history_share est un objet (désolé pour la mauvaise communication) – Tsunaze

+0

hmm ouais je ne savais pas qu'il y avait une classe Connection, mais pour les autres fonctionnalités ma classe de connexion fonctionne bien. C'est juste la liste le problème. – Tsunaze

0
for(int i=0;i < data.length();i++){ 
    list.add(data.getJSONObject(i).getString("names").toString()); 
} 


.getString("names") returns String, remove .toString() 

En outre,

ArrayAdapter<String> adapter = new ArrayAdapter(this, 
    android.R.layout.simple_list_item_1, names_list); 

remplacer par

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
    android.R.layout.simple_list_item_1, names_list); 
0

Vous essayez cette ArrayList en utilisant avec Hashmap:

ArrayList<HashMap<String, String>> comunitylist = new ArrayList<HashMap<String, String>>(); 

String url =_url + _uid + uid; 

JSONParstring jParser = new JSONParstring(); 

// getting JSON string from URL 
String json = jParser.getJSONFromUrl(url,apikey); 

Log.e("kPN", json); 
try 
{ 
    JSONObject jobj = new JSONObject(json); 
    Log.e("kPN", json.toString()); 
    System.out.print(json); 
    JSONArray comarray = jobj.getJSONArray(TAG_COMMU); 

    for(int i = 0; i <= comarray.length(); i++){ 
     JSONObject c = comarray.getJSONObject(i); 
     Log.w("obj", c.toString()); 
     JSONObject d = c.getJSONObject(TAG_PERSON); 
     Log.w("obj", d.toString()); 
     String name =d.getString(TAG_NAME); 
     Log.w("name", name); 

     String nick =d.getString(TAG_NICK); 
     String home = d.getString(TAG_HOME); 
     HashMap<String, String> map = new HashMap<String, String>(); 
     map.put(TAG_NAME, name); 
     map.put(TAG_NICK, nick); 
    } 
} 
catch (JSONException ie) 
{ 

} 

list=(ListView)findViewById(R.id.list); 
adapter=new Lazycommunity(this,listz); 

list.setAdapter(adapter); 

list.setOnItemClickListener(new OnItemClickListener() { 

    @SuppressWarnings("unchecked") 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, 
          int position, long id) { 

     //Having Trouble with this line, how to retrieve value??? 
     HashMap<String, String> map2 = (HashMap<String, String>) list.getAdapter().getItem(position); 

     Intent in = new Intent(getApplicationContext(), Communityprofile.class); 
     in.putExtra(TAG_NAME, map2.get(TAG_NAME)); 
     in.putExtra(TAG_IMG, map2.get(TAG_IMG)); 

     startActivity(in); 
    } 
}); 
+0

Vous devez supprimer les appels 'Log' car ils ne contribuent pas à votre réponse. – nalply