【问题标题】:how to retrive json object using retrofit 2如何使用改造 2 检索 json 对象
【发布时间】:2017-02-03 16:19:11
【问题描述】:

我正在尝试在课堂上检索此内容,但出现错误 Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $ 我的网络服务响应是 {"last_question":"0","level":"0","error":"0"} 谢谢你

json

    {"last_question":"0","level":"0","error":"0"}

活动

    //calling from MainActivity
        private void get()
            {
                Gson gson = new GsonBuilder()
                        .setLenient()
                        .create();

                Retrofit retrofit = new Retrofit.Builder()
                        .baseUrl(BASE_URL)
                        .addConverterFactory(GsonConverterFactory.create(gson))
                        .build();

                API mApi = retrofit.create(API.class);

                Call<Example> call = mApi.getdata();
                call.enqueue(new Callback<Example>()
                {
                    @Override
                    public void onResponse(Call<Example> call, Response<Example> response)
                    {
                        System.out.println(response.body().getError());

                    }

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

                        System.out.println(t.getMessage());
                    }
                });


            }

//pojo类

public class Example {
    private String last_question;
    private String level;
    private String error;
//all getter andd setter are is here
}

【问题讨论】:

  • 应为 BEGIN_OBJECT 但为 STRING 检查您的回复。似乎是字符串,而您的代码需要 JSONObject。您的代码看起来不错
  • 我在api.myjson.com/bins/cw29l 托管了相同的 json 以进行测试,并且相同的 android 代码可以工作,除了它的 get 请求和用于接受 application/json 的标头内容类型

标签: android retrofit2 gson


【解决方案1】:

更新: 您的服务器没有响应您想要的响应。实际上它返回的 HTML 代码:

<html><body><script type="text/javascript" src="/aes.js" ></script><script>function toNumbers(d){var e=[];d.replace(/(..)/g,function(d){e.push(parseInt(d,16))});return e}function toHex(){for(var d=[],d=1==arguments.length&&arguments[0].constructor==Array?arguments[0]:arguments,e="",f=0;f<d.length;f++)e+=(16>d[f]?"0":"")+d[f].toString(16);return e.toLowerCase()}var a=toNumbers("f655ba9d09a112d4968c63579db590b4"),b=toNumbers("98344c2eee86c3994890592585b49f80"),c=toNumbers("9cc75ba79032859c712d6ecb862cfde7");document.cookie="__test="+toHex(slowAES.decrypt(c,2,a,b))+"; expires=Thu, 31-Dec-37 23:55:55 GMT; path=/"; location.href="http://advancedcalc.byethost8.com/test.php?i=2";</script><noscript>This site requires Javascript to work, please enable Javascript in your browser or use a browser with Javascript support</noscript></body></html>

旧(错误)答案:

您忘记在 Example 类中的字段中添加 @SerializedName(name) 注释:

@SerializedName("last_question")
private String last_question;

@SerializedName("level")
private String level;

@SerializedName("error")
private String error;

【讨论】:

  • 名称相同时不需要使用注解,只有名称不同时才需要使用注解
  • @Nikul 您需要检查来自服务器的响应。似乎您最终得到了一个字符串,而您的代码需要 jsonobject。你的 android 代码看起来不错
  • 我更新了我的答案。似乎您的服务器使用 HTML 代码进行响应。
  • @Nikul 检查您的标题。你有标题应用程序/json 吗?检查您的服务器日志
  • java.lang.NullPointerException:在本地主机上运行后尝试在空对象引用上调用虚拟方法'java.lang.String com.example.nik.myapplication.Example.getLast_question()'这个错误@Raghunandan
猜你喜欢
  • 1970-01-01
  • 2021-08-20
  • 2015-12-13
  • 1970-01-01
  • 1970-01-01
  • 2015-12-07
  • 1970-01-01
  • 2016-12-07
相关资源
最近更新 更多