尝试解析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());
}
});
}
}
答案 0 :(得分:0)
您的JSON是一个整数列表,您的Retrofit返回定义为List<Response>
。 Response
类是Retrofit类,用于描述整个API响应。不应在这样的定义中使用它。
Gson期望有一个对象,但是找到一个整数并且无法解析该整数。要对此进行解析,您应该将期望的返回类型声明为“列表”。
这是错误消息告诉您的内容-它正在查找对象,因为这是您已定义的内容,但是却找到了一个数字,因为这是JSON包含的内容。
答案 1 :(得分:0)
此错误意味着您正在尝试检索错误的数据类型,发布的json数据是数字数组,并且正在尝试检索响应对象列表。而是尝试检索
Call<List<Integer>> getResponse();
,如果出现类似
的错误无法解析原始类型
或其中的某些内容,您可以尝试使用 Scalars Converter工厂 与改造。 谢谢