2016-09-17 1 views
1

Ich habe Json Wert wie dieseJson Array Anfrage mit Volley funktioniert nicht

{ 
"events": [2] 
0: { 
"no": 1 
"id": "2" 
"nama": "Meja dengan kaki kuda" 
"harga": 700000 
"gambar": "poster/Donor_darah.jpg" 
"stok": 39 
"qty": 3 
"status": 0 
"total": 2100000 
}- 
1: { 
"no": 2 
"id": "1" 
"nama": "Lemari" 
"harga": 500000 
"gambar": "poster/grand-launching-gerakan-ui-mengajar-51.png" 
"stok": 0 
"qty": 4 
"status": 0 
"total": 2000000 
}- 
- 
"total": 4100000 
} 

und dann will ich es in meiner android app mit Volley abzurufen wie diese

JsonArrayRequest arrReq = new JsonArrayRequest(Request.Method.POST, DATA_GET_NOTIF + page,null, 
       new Response.Listener<JSONArray>() { 
        @Override 
        public void onResponse(JSONArray response) { 
         Log.d(TAG, response.toString()); 

         if (response.length() > 0) { 
          try { 
           for (int a = 0; a < response.length(); a++) { 
            JSONObject obj = response.getJSONObject(a); 
            JSONArray event = obj.getJSONArray("events"); 
            Log.d("JsonArray",response.toString()); 

            // Parsing json 
            for (int i = 0; i < event.length(); i++) { 

             JSONObject jb = (JSONObject) event.get(i); 
             Cart news = new Cart(); 

             int total = 0; 
             no = jb.getInt("no"); 

             news.setId(jb.getString("id")); 
             news.setJudul(jb.getString("nama")); 
             news.setHarga(jb.getInt("harga")); 
             news.setStok(jb.getInt("stok")); 
             news.setQty(jb.getInt("qty")); 
             news.setStatus(jb.getInt("status")); 
             news.setTotal(jb.getInt("total")); 


             if (jb.getString("gambar") != "") { 
              news.setImageUrl(jb.getString("gambar")); 
             } 


             // adding news to news array 
             eventList.add(news); 

             if (no > offSet) 
              offSet = no; 

             Log.d(TAG, "offSet " + offSet); 


             // notifying list adapter about data changes 
             // so that it renders the list view with updated data 
             adapter.notifyDataSetChanged(); 
            } 
           } 
          }catch (JSONException e) { 
           e.printStackTrace(); 
          } 
         } 
         swipe.setRefreshing(false); 
        } 

       }, new Response.ErrorListener() { 

      @Override 
      public void onErrorResponse(VolleyError error) { 
       VolleyLog.d(TAG, "Error: " + error.getMessage()); 
       swipe.setRefreshing(false); 
      } 

     }){ 
     @Override 
     public Map<String, String> getHeaders() throws AuthFailureError { 
      HashMap<String, String> params = new HashMap<String, String>(); 
      params.put("authorization", apikeys); 
      return params; 
     }}; 

     // Adding request to request queue 
     AppController.getInstance().addToRequestQueue(arrReq); 

warum ist es nicht angezeigt, in meiner App. weil es funktioniert, bevor ich "Ereignisse" Array in meinem Json-Wert hinzufügen. so, bevor ich Ereignisse Array mein json Wert justlike dieser

[2] 
0: { 
"no": 1 
"id": "17" 
"judul": "Compfest 8 Seminar" 
"deskripsi": "tes" 
"duit": 47 
"persen": 47 
"sisahari": 47 
}- 
1: { 
"no": 2 
"id": "19" 
"judul": "Grand Launching Gerakan UI Mengajar 5" 
"deskripsi": "tes" 
"duit": 80 
"persen": 80 
"sisahari": 80 
} 

und mein Code hinzufügen, wenn es funktioniert wie folgt aus:

JsonArrayRequest arrReq = new JsonArrayRequest(Request.Method.POST, DATA_GET_NOTIF + page,null, 
       new Response.Listener<JSONArray>() { 
        @Override 
        public void onResponse(JSONArray response) { 
         Log.d(TAG, response.toString()); 

         if (response.length() > 0) { 
          // Parsing json 
          for (int i = 0; i < response.length(); i++) { 
           try { 


            JSONObject obj = response.getJSONObject(i); 
            Cart news = new Cart(); 

            int total = 0; 
            no = obj.getInt("no"); 

            news.setId(obj.getString("id")); 
            news.setJudul(obj.getString("nama")); 
            news.setHarga(obj.getInt("harga")); 
            news.setStok(obj.getInt("stok")); 
            news.setQty(obj.getInt("qty")); 
            news.setStatus(obj.getInt("status")); 
            news.setTotal(obj.getInt("total")); 


            if (obj.getString("gambar") != "") { 
             news.setImageUrl(obj.getString("gambar")); 
            } 
+0

Da Ihre Antwort mit einer geschweiften Klammer beginnt, Es wird als JSON-Objekt betrachtet (das zufälligerweise ein JSonarray enthält) ... aber ich denke, das OnResponse() erwartet ein reines Array, das mit einer eckigen Klammer beginnen sollte. Gibt es einen Grund, warum Sie den Namen des Arrays angeben müssen? –

+0

ya Ich brauche es, also kann ich ein Objekt summieren und es außerhalb des Arrays "events" platzieren. es ist aber schon gelöst. nur dummer Fehler mit Start Json Wert –

Antwort

1

Sehen Sie sich Ihre JSON-Format, wenn es

**[2]** 
0: { 
"no": 1 
"id": "17" 
"judul": "Compfest 8 Seminar" 
"deskripsi": "tes" 
"duit": 47 
"persen": 47 
"sisahari": 47 
}- 

arbeiten sie beginnt mit Array zuerst, so können Sie jsonarrayrequest

verwenden, aber wenn Sie Ihr JSON-Format ändern, beginnt es wit h JSON-Objekt nicht Array wieder

**{** 
"events": [2] 
0: { 
"no": 1 
"id": "2" 
"nama": "M 

So können Sie jsonobjectrequest statt jsonarrayrequest oder die zweite Option verwenden Sie gerade erst mit Array Ihr neues JSON-Format ändern statt Objekt

+1

ahhh ich sehe jetzt. Es funktioniert jetzt, wenn ich meinen Json-Wert mit Array starte und immer noch JsonArrayRequest benutze. Vielen Dank –

Verwandte Themen