尝试发送GET请求时改装失败

时间:2018-12-24 05:08:33

标签: android json retrofit2

尝试解析API响应时,我从Retrofit中收到以下错误:

[java.lang.IllegalStateException: Expected BEGIN_OBJECT but was NUMBER at line 1 column 11 path $[0]]

JSON是:

 [ 7407718726019,  18738122, 18732587, 18737891, 18729099, 18731581, 18737081, 18731938, 18731885, 187, 18724725, 18747879, 18732512, 18732217, 18746712 ]

该列表没有密钥。任何人都可以帮助我解决此问题。

这是我的API定义接口:

public interface RemoteInterface {

    //Method for an api call
    @GET("v0/topstories.json?print=pretty")
    Call<List<Response>> getResponse();
}

这就是我调用和处理API的方式:

public class MainActivity extends AppCompatActivity {

    private List<Response> responses;
    RemoteInterface remoteInterface;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        remoteInterface = ApiClient.getApiClient().create(RemoteInterface.class);
        Call<List<Response>> newsCall = remoteInterface.getResponse();


        newsCall.enqueue(new Callback<List<Response>>() {
            @Override
            public void onResponse(Call<List<Response>> call, retrofit2.Response<List<Response>> response) {
                Toast.makeText(MainActivity.this, (CharSequence) response.body
                        (), Toast.LENGTH_SHORT).show();
                Log.d("response",response.body().toString());
            }

            @Override
            public void onFailure(Call<List<Response>> call, Throwable t) {
                Toast.makeText(MainActivity.this, "fail", Toast.LENGTH_SHORT).show();
                Log.d("response",t.getMessage());
            }
        });
    }
}

2 个答案:

答案 0 :(得分:0)

您的JSON是一个整数列表,您的Retrofit返回定义为List<Response>Response类是Retrofit类,用于描述整个API响应。不应在这样的定义中使用它。

Gson期望有一个对象,但是找到一个整数并且无法解析该整数。要对此进行解析,您应该将期望的返回类型声明为“列表”。

这是错误消息告诉您的内容-它正在查找对象,因为这是您已定义的内容,但是却找到了一个数字,因为这是JSON包含的内容。

答案 1 :(得分:0)

此错误意味着您正在尝试检索错误的数据类型,发布的json数据是数字数组,并且正在尝试检索响应对象列表。而是尝试检索

Call<List<Integer>> getResponse();

,如果出现类似

的错误
  

无法解析原始类型

或其中的某些内容,您可以尝试使用 Scalars Converter工厂 与改造。 谢谢