【问题标题】:This is not a JSON Array. (retrofit, gson)这不是 JSON 数组。 (改造,gson)
【发布时间】:2018-03-19 04:50:42
【问题描述】:

是改造代码

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.\"}]"}

这是响应。(日志结果)我认为是 JsonArray 但是错误ㅠ_ㅠ

    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)

我使用的是 jsonprimitive 而不是 jsonarray,所以我没有收到错误。为什么?

【问题讨论】:

    标签: arrays json gson retrofit


    【解决方案1】:

    这是因为您试图将 JsonObject 保存到 JsonArray 。尝试将其保存到 JsonObject 变量中。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-25
      • 2017-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-23
      • 2015-11-16
      • 1970-01-01
      相关资源
      最近更新 更多