2017-10-07 5 views
0

Es ist Retrofit-CodeDies ist kein JSON-Array. (Retrofit, Gson)

Retrofit builder = new Retrofit.Builder() 
      .baseUrl(APIUrl.API_BASE_URL) 
      .addConverterFactory(GsonConverterFactory.create()) 
      .build(); 
    RestAPI restAPI = builder.create(RestAPI.class); 
    Call<JsonObject> call = restAPI.wiseSaying(); 
    call.enqueue(new Callback<JsonObject>() { 
     @Override 
     public void onResponse(Call<JsonObject> call, Response<JsonObject> response) { 
      Log.d("response----", response.body().toString()); 

      JsonArray jsonArray = response.body().getAsJsonArray(); 
     } 

     @Override 
     public void onFailure(Call<JsonObject> call, Throwable t) { 

     } 
    }); 

{"phrase":"[{\"author\":\"abc\",\"say\":\"aaaaa\"}, 
{\"author\":\"def\",\"say\":\"sdffdf.\"}, 
{\"author\":\"gsdf\",\"say\":\"dsfdsfdsf.\"}]"} 

Es ist Antwort. (Log Ergebnis) Ich denke, JsonArray Aber Fehler ㅠ _ ㅠ

FATAL EXCEPTION: main 
                   Process: com.dsm.wakeheart, PID: 28267 
                   java.lang.IllegalStateException: This is not a JSON Array. 
                    at com.google.gson.JsonElement.getAsJsonArray(JsonElement.java:106) 
                    at com.dsm.wakeheart.Fragment.WiseSayingFragment$1.onResponse(WiseSayingFragment.java:82) 
                    at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:68) 
                    at android.os.Handler.handleCallback(Handler.java:739) 
                    at android.os.Handler.dispatchMessage(Handler.java:95) 
                    at android.os.Looper.loop(Looper.java:148) 
                    at android.app.ActivityThread.main(ActivityThread.java:5417) 
                    at java.lang.reflect.Method.invoke(Native Method) 
                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

Ich war mit jsonprimitive statt jsonarray, also habe ich keinen Fehler bekommen. Warum?

Antwort

1

Es ist, weil Sie versuchen, das JsonObject zu einem JsonArray zu speichern. Versuchen Sie, es in einer JsonObject-Variablen zu speichern.

JSONObject jsonObject= response.body(); 
try { 
JSONArray jsonAr=jsonObject.getJSONArray("phrase"); 
} 
catch (JSONException e) { 
e.printStackTrace(); 
} 
Verwandte Themen