2016-06-13 27 views
-1

Ich versuche, diese JSON-Daten von Web-Service zu Android mit Volley zu analysieren. Dies ist das zu analysierende json-Array.Parsen Json Array von Webservice zu Android

[ 
{ 
    "id":"1", 
    "conf_room_name":"Tadoba" 
}, 
{ 
    "id":"2", 
    "conf_room_name":"Melghat" 
}, 
{ 
    "id":"3", 
    "conf_room_name":"Ranthambore" 
}, 
{ 
    "id":"4", 
    "conf_room_name":"Corbett" 
}, 
{ 
    "id":"5", 
    "conf_room_name":"Pench" 
} 
] 
[ 
{ 
    "id":"1", 
    "area":"Mafatlal" 
}, 
{ 
    "id":"2", 
    "area":"Andheri" 
} 
] 
[ 
{ 
    "id":"1", 
    "type":"Is Personal" 
}, 
{ 
    "id":"2", 
    "type":"Meeting" 
} 
] 

Ich verwende diesen Code, um den Wert aus meinem JSON-Array-Objekt von verschiedenen Arraylists zu erhalten.

RequestQueue requestQueue2 = Volley.newRequestQueue (this); // RequestQueue requestQueue3 = Volley.newRequestQueue (this);

// Create json array request 
    JsonArrayRequest jsonArrayRequest=new JsonArrayRequest(Request.Method.POST,"http://170.241.241.198/test.php",new Response.Listener<JSONArray>(){ 
     public void onResponse(JSONArray jsonArray){ 


      for(int i=0;i<jsonArray.length();i++){ 
       try { 
        JSONObject jsonObject=jsonArray.getJSONObject(i); 
        stringArray_conf.add(jsonObject.getString("conf_room_name")); 
        stringArray_area.add(jsonObject.getString("area")); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 


     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError volleyError) { 
      Log.e("Error", "Unable to parse json array"); 
     } 
    }); 

    requestQueue2.add(jsonArrayRequest); 

Nur das erste Array wird korrekt gefüllt, nicht das andere. Ich bekomme outboundsindex Ausnahme, wenn ich versuche, Werte von meinem 2. Arraylist zu verwenden.

All dies geschieht auf einen Knopf klicken nur ich möchte, dass dies geschieht, wenn ich meine Seite laden.

Jede Hilfe wird geschätzt.

+0

Ihre JSON-Daten hinzufügen, statt Bild –

+0

auch den Code hinzufügen, um die Daten zu analysieren, verwenden und die Java-pojo Sie verwendet haben. –

+0

Ist das okay? Brauchen Sie auch Logcat-Daten? @shamimreza –

Antwort

1

Make JSON als Array wie folgt:

[ 
    [ 
    { 
     "id": "1", 
     "conf_room_name": "Tadoba" 
    }, 
    { 
     "id": "2", 
     "conf_room_name": "Melghat" 
    }, 
    { 
     "id": "3", 
     "conf_room_name": "Ranthambore" 
    }, 
    { 
     "id": "4", 
     "conf_room_name": "Corbett" 
    }, 
    { 
     "id": "5", 
     "conf_room_name": "Pench" 
    } 
    ], 
    [ 
    { 
     "id": "1", 
     "area": "Mafatlal" 
    }, 
    { 
     "id": "2", 
     "area": "Andheri" 
    } 
    ], 
    [ 
    { 
     "id": "1", 
     "type": "Is Personal" 
    }, 
    { 
     "id": "2", 
     "type": "Meeting" 
    } 
    ] 
] 

oder Objekt (leichter zu lesen und zu verstehen):

{ 
    "rooms": [ 
    { 
     "id": "1", 
     "conf_room_name": "Tadoba" 
    }, 
    { 
     "id": "2", 
     "conf_room_name": "Melghat" 
    }, 
    { 
     "id": "3", 
     "conf_room_name": "Ranthambore" 
    }, 
    { 
     "id": "4", 
     "conf_room_name": "Corbett" 
    }, 
    { 
     "id": "5", 
     "conf_room_name": "Pench" 
    } 
    ], 
    "areas": [ 
    { 
     "id": "1", 
     "area": "Mafatlal" 
    }, 
    { 
     "id": "2", 
     "area": "Andheri" 
    } 
    ], 
    "types": [ 
    { 
     "id": "1", 
     "type": "Is Personal" 
    }, 
    { 
     "id": "2", 
     "type": "Meeting" 
    } 
    ] 
} 

PHP-Code vielleicht wie unten:

<?php 

$sqlroom = mysql_query("SELECT * FROM `room_table`"); 
$room_rows = array(); 
while($r = mysql_fetch_assoc($sqlroom)) { 
    $room_rows[] = $r; 
} 

$sqlarea = mysql_query("SELECT * FROM `area_table`"); 
$area_rows = array(); 
while($r = mysql_fetch_assoc($sqlarea)) { 
    $area_rows[] = $r; 
} 

$sqltype = mysql_query("SELECT * FROM `type_table`"); 
$type_rows = array(); 
while($r = mysql_fetch_assoc($sqltype)) { 
    $type_rows[] = $r; 
} 

$result = array(); 
$result["rooms"] = $room_rows; 
$result["areas"] = $area_rows; 
$result["types"] = $type_rows; 

echo json_encode($result); 

?> 
+0

Ich ziehe alle diese Werte von einem MySQL-Server und dann mit PHP, um die JSON-Daten zu kodieren, die mir die Struktur des JSON-Array gibt. Ist es möglich, diese Art von Struktur mit PHP und MySQL zu machen? –

+0

Sicher, Sie sollten die JSON-Antwort steuern, wie Sie möchten. –

+0

{"conf_rooms": [{"id": "1", "conf_roomname": "Tadoba"}, {"id": "2", "conf_roomname": "Melghat"}, {"id": "3 "," conf_room_name ":" Ranthambore "}, {" id ":" 4 "," conf_roomname ":" Corbett "}, {" id ":" 5 "," conf_roomname ":" Pench "}]," Bereiche ": [{" id ":" 1 "," Bereich ":" Mafatlal "}, {" id ":" 2 "," Bereich ":" Andheri "}]," Typen ": [{" id ": "1", "type": "Ist persönlich"}, {"id": "2", "type": "Besprechung"}]} –

0

Sie scheinen zu versuchen, drei verschiedene Arten von Daten zu analysieren: Konferenzräume, Bereiche (die vermutlich einen Konferenzraum enthalten) s?) und einige Informationen über beide (obwohl es nicht klar ist, welche). Es ist daher nicht sinnvoll, diese in einem einzigen Array zu speichern, da jedes Element eine andere Datenstruktur enthält als die anderen beiden.

Wenn type eine Beschreibung eines der beiden anderen Objekte ist, dann sollte es in diesem Objekt enthalten sein und nicht als separates Objekt behandelt werden. Ein Zimmer nicht unbedingt muss in einem Bereich sitzen, aber es könnte auch sinnvoll sein, es dort zu haben.

Sie sagen, Sie sind „von einem MySQL-Server alle diese Werte ziehen und dann mit PHP die JSON-Daten zu codieren, die mir die Struktur des JSON-Array gibt“, die Sie auf die JSON-Struktur haben keinen direkten Zugriff impliziert , aber Sie sollten immer noch Zugriff auf die PHP-Struktur haben. Der JSON-Encoder verwendet das Design des PHP-Arrays/-Objekts zur Strukturierung des JSON. Um dies zu ermöglichen, müssen Sie mehr oder weniger passende PHP- und Java-Objekte an beiden Enden des Serialisierungsprozesses erstellen.

Zum Beispiel:

$obj = (object) array 
    ('id' => '1', 'area' => 'Mafatlal', 'rooms' => array 
    ('id' => '1', 'conf_room_name' => 'Tadoba', 'type' => 'Is Personal'), 
    ... 
    ('id' => '2', 'area' => 'Andheri', 'rooms' => array... 
); 

und

public class Area { 
    private int id; 
    private String area; 
    private Room[] rooms; 

} 

public class Room { 
    private int id; 
    private String conf_room_name; 
    private String type; 
} 

Beachten Sie, dass im Gegensatz zu dem üblichen Java Kamel-Fall Namenskonvention, Objektvariablen müssen in der Regel der eingehenden JSON Variablennamen übereinstimmen (zB: conf_room_name statt confRoomName).

+0

Yeah alle drei Dinge, wiz Bereich, Typ und conf_rooms sind nicht verwandt.So sollte ich verschiedene Arrays für jeden von ihnen machen und unterschiedliche Netzwerkaufrufe für jedes Array oder sollte ich sie in die gleichen Array und Parsing sie in einem einzigen Netzwerkanruf? –

+0

Wenn sie völlig unabhängig sind, überlegen Sie, warum Sie versuchen, sie alle mit einem einzigen Netzwerkanruf zu holen.Wenn es einen guten Grund (wie hohe Netzwerklatenz, z Beispiel), könnten Sie alle in ein einzelnes Objekt einfügen, wie @Tran Hieu vorgeschlagen hat. Wenn sie vollständig getrennt behandelt werden können, trennen Sie sie. – AJR

0

Sie müssen Werte mit der for-Schleife hinzufügen.

 for(int i=0;i<jsonArray.length();i++){ 
      try { 
       JSONObject jsonObject=jsonArray.getJSONObject(i); 
       if(jsonObject.toString.contains("conf_room_name")) 
        stringArray_conf.add(jsonObject.getString("conf_room_name")); 
       else if(jsonObject.toString.contains("area")) 
        stringArray_area.add(jsonObject.getString("area")); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
+0

Ich habe einen Fehler nach der Verwendung Ihrer Methode erhalten. Dies ist der Logcat. –

+0

06-13 16: 12: 17.115 2203-2203/com.example.gandhjee.pantry_order E/AndroidRuntime: FATALE AUSNAHME: Haupt Prozess: com.example.gandhjee.pantry_order, PID: 2203 java.lang.RuntimeException: Unable Starten der Aktivität ComponentInfo {com.example.gandhjee.pantry_order/com.example.gandhjee.pantry_order.nachLogin}: java.lang.IndexOutOfBoundsException: Ungültiger Index 0, Größe ist 0 –

+0

versuchen Sie es zu debuggen, überprüfen Sie, ob es in die Schleife eintritt. –