2010-11-21 7 views
0

Ich habe ein kleines Problem, und ich sehe es nicht.JSonarray zu Arraylist und Arraylist in ListAdapter funktioniert nicht. (In Android)

Ich erhalte Json Daten (JSONArray) und ich wollte eine List aller Namen in der JSONArray, etwas wie diese.

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

Und ich wollte diese Liste in einem `Listview‘ nehmen, damit ich dies tat.

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 ist eine der Methode i json Daten von einem api nehmen erstellt Eklipse sieht keinen Fehler, und ich auch nicht.

mir jemand helfen bitte?

+0

Was nicht funktioniert? Welche Fehlermeldungen erhalten Sie? – Falmarri

+0

Ich habe nichts, das ist das Problem, und wenn ich die Android-Anwendung lauge macht es ein: "Die Anwendung hat unerwartet gestoppt" -Sache. – Tsunaze

+0

@Tsunaue: Es muss eine Logcat-Ausgabe für diese Ausnahme geben. –

Antwort

0

Warum Ihre Methoden haben Unterstrichen in ihren Namen? Methods vereinbarungs begi n mit einem Kleinbuchstaben. Zum Beispiel myMethod(). Klassennamen beginnen mit Großbuchstaben wie MyClass. Sie sollten dabei bleiben.

Auch history_share ist keine Methode, wie Sie Ihren Code gepostet haben, und Sie können nichts aus einer Methode abrufen, indem Sie sie so aufrufen.

Eine Getter-Methode gibt nur das definierte Element zurück. Ich bin sehr überrascht, dass Eclipse das nicht hervorhebt. Sind Sie sicher, dass die Fehlerprüfung aktiviert ist?

Update: Die Benennung Ihrer Klassen wie bereits existierende Klassen ist im Allgemeinen eine sehr schlechte Idee und es wird noch schlimmer, wenn Sie die ursprüngliche Klasse irgendwo oder irgendeine Klasse dieser Klasse verwenden wollen. In der ursprünglichen Connection Klasse kann ich keine statischen Member namens list erkennen, was zu der Annahme führt, dass Sie Ihre eigene Connection-Klasse erstellt haben. Dies muss hier nicht das Problem sein, aber es kann Probleme in der Zukunft aufwerfen, wenn Sie dies weiterhin tun.

+0

ja, und ich habe zwei Klassen: Main.java und Connection.java, ich erstellte history_share wie folgt: Connection history_share = neue Verbindung (URL); history_share ist ein Objekt (Entschuldigung für die Miscommunication) – Tsunaze

+0

hmm yep ich wusste nicht, dass es eine Verbindungsklasse gab, aber für die anderen Funktionen funktioniert meine Verbindungsklasse gut. Es ist nur die Liste das Problem. – Tsunaze

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


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

Auch

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

ersetzen mit

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

Sie versuchen, diese ArrayList mit Hashmap Verwendung:

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

Sie sollten die "Log" -Aufrufe entfernen, weil sie nicht zu Ihrer Antwort beitragen. – nalply