2016-12-30 38 views
-1

Wie kann ich diese Json API mit einem webrequest analysieren, genau das Element „Spieler“:Android JSON Array Parsing

{ 
    "data": [ 
     { 
      "Id": *, 
      "ModId": *, 
      "appId": ***********, 
      "online": *, 
      "Servername": "**** **** *****", 
      "IpAddress": "**.**.**.**", 
      "Port": ****, 
      "ServerPassword": ********, 
      "StartParameters": "*******", 
      "Slots": **, 
      "Playercount": **, 
      "Civilians": **, 
      "Medics": *, 
      "Cops": *, 
      "Adac": *, 
      "Players": [ 
       "***********", 
       "***********", 
       "******", 
       "******" 
      ] 
     } 
    ] 
} 

Ich will es analysieren, dass ich jedes Mal erhalten, wenn die Schleife einen Spielernamen läuft um es zu einer Listenansicht hinzuzufügen. Aber ich kann das Element "Player" nicht so parsen.

Vielen Dank für Ihre Hilfe!

+0

http://stackoverflow.com/questions/5566669/how-to-parse-a-json-object-in-android – NehaK

Antwort

0

Der folgende Code eine Liste mit den Spielern aus dem JSON-String auffüllt.

List<String> players = new ArrayList<>(); 

try { 
    JSONObject jsonObj = new JSONObject(jsonString); 
    JSONArray data = jsonObj.getJSONArray("data"); 
    JSONObject dataObj = data.getJSONObject(0); 
    JSONArray playersJson = dataObj.getJSONArray("Players"); 

    for (int i = 0; i < playersJson.length(); i++) { 
     players.add(playersJson.get(i).toString()); 
    } 
} catch (JSONException e) { 
    Log.e(TAG, e.getMessage()); 
} 

Anschließend können Sie diese Liste verwenden, zusammen mit einem ArrayAdapter Ihre ListView zu füllen.

ArrayAdapter<String> adapter; 
    ListView listView = (ListView) findViewById(R.id.listView); 
    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, players); 
    listView.setAdapter(adapter); 
+0

Anstelle von adapter.notifyDataSetChanged(); Hast du versucht, den Adapter so einzurichten, wie ich ihn habe? Erhalten Sie irgendwelche Fehler? Wenn ja, posten Sie bitte den Stack-Trace. –

+0

Ich habe es mit Ihrem Listview Adapter versucht. Es gibt keine Änderung, aber ich habe den Fehler gefunden, aber ich weiß nicht, wie ich ihn lösen soll. Die Antwort von Volley ist komplett leer. – emt1803

+0

Sind Sie sicher, dass die Spieler bevölkert sind? Können Sie die Länge/den Inhalt der zu überprüfenden Liste protokollieren? Außerdem sollten Sie eine Log-Anweisung in den Catch-Zweig schreiben, falls eine Ausnahme ausgelöst wird. –

0

Sie können einen Index speichern, wie viele Elemente aus den JSON entfernt. wie

int index = 0;

und eine Methode, den Zugang zu JSON und übergibt Index, um es wie

public String getPlayerFromJsonAtIndex(int i) {...} zu erstellen.

Jetzt Zugriff auf die JSON Zeichenfolge und analysieren Sie es mit JSONObject (Hinweis speichern Sie das analysierte Player-Array auf einmal beim Starten). Lassen Sie analysierten Array Spieler wie

JSONArray players = (new JSONObject(jsonString)) 
    .getJSONArray("data") 
    .get(0) 
    .getJSONArray("Players"); 

nun von diesem Spieler JSONArray String am Index zur Verfügung gestellt bekommen. wie

{ 
    return (String)players.get(i); 
} 

Hoffe, dass dies hilft, danke.

+0

Vielen Dank, aber der Compiler sagt auf der Zeile: .getJSONArray ("Spieler "); : "Kann Methode nicht auflösen ....." – emt1803

0

Verwenden Sie diesen unteren Code, um die Antwort zu parsen.

JSONObject objMain = new JSONObject(yourData); 
     try { 
      JSONArray respArray = objMain.getJSONArray("data"); 
      for(int i=0;i<respArray.length();i++) 
      { 
       JSONObject dataObj = respArray.getJSONObject(i); 
       String id = dataObj.getString("id"); 
       - 
         - 
       JSONArray arrayPlayer = dataObj.getJSONArray("players"); 
       for(int j=0;j<arrayPlayer.length();j++){ 
        JSONObject playerObj = arrayPlayer.getJSONObject(j); 
        --- 
       } 
      } 
     }catch (Exception e){ 
      e.printStackTrace(); 
     } 

und restliche Daten verwenden richtige Parameter zu nehmen .. :)