我正在使用 Retrofit 2。我在 http://ip.jsontest.com/ 上使用测试 JSON .这是非常简单的JSON。为什么我会犯这个错误?
在实际项目中我也有这个错误,但我认为,这是因为我有很大的 JSON。我使用测试 JSON。需要帮助))
java.lang.IllegalStateException:预期为 BEGIN_ARRAY,但在第 1 行第 2 列路径 $ 处为 BEGIN_OBJECT $
这是 JSON
{ “ip”:“54.196.188.78” }
我的界面
public interface UmoriliApi {
@GET(".")
Call<List<Test>> getData();
}
我的测试类(class)
public class Test {
@SerializedName("ip")
@Expose
private String ip;
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
}
我的 API 类
public class App extends Application {
private static UmoriliApi umoriliApi;
private Retrofit retrofit;
@Override
public void onCreate() {
super.onCreate();
retrofit = new Retrofit.Builder()
.baseUrl("http://ip.jsontest.com/")
.addConverterFactory(GsonConverterFactory.create())
.build();
umoriliApi = retrofit.create(UmoriliApi.class);
}
public static UmoriliApi getApi() {
return umoriliApi;
}
}
我的 MainActivity 类
public class MainActivity extends AppCompatActivity {
private static final String TAG = "TAG";
List<Test> posts;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
posts = new ArrayList<>();
App.getApi().getData().enqueue(new Callback<List<Test>>() {
@Override
public void onResponse(Call<List<Test>> call, Response<List<Test>> response) {
posts.addAll(response.body());
Log.d(TAG, "onResponse: "+posts.size());
}
@Override
public void onFailure(Call<List<Test>> call, Throwable t) {
Log.d(TAG, "onFailure: ");
}
});
}
}
最佳答案
基本上,您期待的是 Array,但收到的是 JSON 对象。
正如阿卡什在评论中所说:
Call<List<Test>> getData();
List<Test>
是您期望时所写的内容,并且 Array.您需要写Call<Test>
对于一个对象测试
您还必须更改回调。
关于java - retrofit 2 : Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45621527/