【问题标题】:How to parse JSON array with single element without any object in Retrofit?如何在Retrofit中解析没有任何对象的单个元素的JSON数组?
【发布时间】:2016-08-29 11:46:04
【问题描述】:

我正在使用使用 GSON 进行解析的 Retrofit。服务器将检查我发送的参数并相应地返回两个响应。 如果参数有效,我将收到以下响应

[
  true
]

如果它无效,那么我会得到响应,

   [
      "Sorry, <em class=\"placeholder\">names@gmail.inp</em> is not recognized as a user name or an e-mail address."
    ]

这是我正在使用的调用方法。

@Override

public void onResponse(Call<String> call, Response<String> response) {
mProgressBar.setVisibility(View.GONE);
    Log.d("Response ", ""+response);


}

这里 response.body 给我一个空值。但是有一个响应,可以在 OKHttp Log 中查看。

【问题讨论】:

  • 将该参数设为Object。解析后检查解析后的 Object instanceof Boolean 还是 String.

标签: android json retrofit gson


【解决方案1】:

你可以试试这个

 JSONArray jArray=new JSONArray(yourString);

 String str=jArray.getString(0);;
 if(str.equalsIgnoreCase("true")
 {
      //your code
 }else
 {
 }

【讨论】:

  • 我没有得到 jsonob。
  • 我连字符串都没有
  • 我得到 response.body() 的值在我的活动中为空。但是我们可以在 D/OkHttp 中看到一个响应:["对不起,gjgh@gmail.com 未被识别为用户名或电子邮件地址。"]
  • 先转成字符串再试试
  • 这就是我正在尝试的!这实际上是我的问题
【解决方案2】:
JSONArray jarray = new JSONObject(jsonString);
for (int i = 0; i < jarray.length(); i++) {
      String string = jarray.getString(i);
      log.e("String",string);
}

效果很好。请试试这个。

【讨论】:

  • 我什至没有得到 JSONObject
  • 但是你可以在 onsuccess 的改造方法中得到回应。在这个 on siccess 方法中可以直接解析。
  • 我得到 null 作为 response.body()
  • 首先检查您的网址。如果 url 正确,请检查您的改造代码。
  • public void onResponse(Call call, Response response) { String sresponce = response.body(); }
【解决方案3】:

您可以使用Gson提供的JsonParser。它将json输入解析为动态JsonElement。

MByD例子:

 public String parse(String jsonLine) {
    JsonElement jelement = new JsonParser().parse(jsonLine);
    JsonObject  jobject = jelement.getAsJsonObject();
    jobject = jobject.getAsJsonObject("data");
    JsonArray jarray = jobject.getAsJsonArray("translations");
    jobject = jarray.get(0).getAsJsonObject();
    String result = jobject.get("translatedText").toString();
    return result;
}

【讨论】:

    【解决方案4】:

    因为服务器返回不同的代码

    你可以试试

    Call<Void> 
    

    并检查响应代码 这可能暂时有效,直到你知道什么是错误的 void 不会解析任何东西,所以它不应该导致崩溃

    ///////

    你试过了吗

    Call<ArrayList<String>>
    

    你确定服务器在这两种情况下都返回 200 吗?

    【讨论】:

    • 我第一次尝试了这个。那个时候我得到了空指针异常。服务器在两种情况下分别返回不同的 200 和 406。
    • 试试 Call 告诉我进展如何
    猜你喜欢
    • 2015-04-22
    • 1970-01-01
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多