2016-07-17 10 views
1

У меня проблема с анализом объекта HAL + JSON в android. Это мой код:Android parse HAL + JSON

package com.example.philipp.productshopproject; 

import android.os.AsyncTask; 
import android.util.Log; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 
import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 

import java.util.logging.Level; 
import java.util.logging.Logger; 
; 

/** 
* Created by Philipp on 01.06.2016. 
*/ 
public class GetProducts extends AsyncTask<String, Void, String> { 
    String result = ""; 
    @Override 
    protected String doInBackground(String... urls) { 
     String url = urls[0]; 
     HttpURLConnection c = null; 
     try { 
      URL u = new URL(url); 
      c = (HttpURLConnection) u.openConnection(); 
      c.setRequestMethod("GET"); 
      c.setRequestProperty("Content-length", "0"); 
      c.setUseCaches(false); 
      c.setAllowUserInteraction(false); 
      // c.setConnectTimeout(timeout); 
      // c.setReadTimeout(timeout); 
      c.connect(); 
      int status = c.getResponseCode(); 

      switch (status) { 
       case 200: 
       case 201: 
        BufferedReader br = new BufferedReader(new InputStreamReader(c.getInputStream())); 
        StringBuilder sb = new StringBuilder(); 
        String line; 
        while ((line = br.readLine()) != null) { 
         sb.append(line + "\n"); 
        } 
        br.close(); 
        Log.d("kacka", sb.toString()); 
        int i; 


        try { 
         JSONObject jsonObject = new JSONObject(sb.toString()); 
         JSONArray jsonArray = jsonObject.getJSONArray("_embedded"); 
         Log.d("kacka", jsonObject.toString()); 
         for(i=0; i < jsonArray.length(); i++) { 

          JSONObject jObject = jsonArray.getJSONObject(i); 

          String produktname = jObject.getString("produktname"); 
          String kategorie = jObject.getString("kategorie"); 
          String beschreibung = jObject.optString("beschreibung").toString(); 
          Double preis = jObject.getDouble("preis"); 
          Double bewertung = jObject.getDouble("bewertung"); 
          Log.d("kacka", beschreibung); 

         } // End Loop 
        } catch (JSONException e) { 
         Log.e("JSONException", "Error: " + e.toString()); 
        } // catch (JSONException e) 

        return sb.toString(); 
      } 

     } catch (MalformedURLException ex) { 
      Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex); 
     } catch (IOException ex) { 
      Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex); 
     } finally { 
      if (c != null) { 
       try { 
        c.disconnect(); 
       } catch (Exception ex) { 
        Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex); 
       } 
      } 
     } 

     return null; 
    } 

Это HAL + JSON данных:

{ 
    "_id": "products", 
    "_returned": 2, 
    "_embedded": { 
    "rh:doc": [ 
     { 
     "_id": { 
      "$oid": "578b712226f1a7f670df2ae9" 
     }, 
     "_etag": { 
      "$oid": "578b719e0106fa1728fdc730" 
     }, 
     "produktname": "Badehaube", 
     "kategorie": "Sportartikel", 
     "preis": 25, 
     "beschreibung": "Badehaube", 
     "bewertung": 3, 
     "ratedBy": [ 
      "admin" 
     ], 
... 

Когда я начинаю это я просто получаю эту ошибку:

07-17 15:03:41.113 25811-25835/? E/JSONException: Error: org.json.JSONException: Value {"rh:doc":[{"_id":{"$oid":"578b712226f1a7f670df2ae9"},"_etag":{"$oid":"578b719e0106fa1728fdc730"},"produktname":"Badehaube","kategorie":"Sportartikel","preis":25,"beschreibung":"Badehaube",".....

Вы знаете, как разобрать этот ?

+0

На какой линии становится вопрос? показать полный журнал аварий –

ответ

0

Здесь:

JSONArray jsonArray = jsonObject.getJSONArray("_embedded"); 

_embedded является JSONObject, которые содержат rh:docJSONArray .so нужно получить rh:docJSONArray от _embedded:

JSONObject _embeddedObject = jsonObject.getJSONObject("_embedded"); 
//rh:doc JSONArray 
JSONObject rndocJSONArray = _embeddedObject.getJSONArray("rh:doc");