改造2:预期BEGIN_ARRAY但在第1行第2栏路径为$ BEGIN_OBJECT $

时间:2017-08-10 18:54:22

标签: java android json retrofit2

我正在使用Retrofit 2.我在http://ip.jsontest.com/上使用测试JSON。这是非常简单的JSON。为什么我接受这个错误?

在实际项目中我也有这个错误,但我认为,这是因为我有非常大的JSON。我使用测试JSON。需要帮助))

java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $

这是JSON

{ “ip”:“54.196.188.78” }

我的界面

public interface UmoriliApi {
    @GET(".")
    Call<List<Test>> getData();
}

我的测试类

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: ");
            }
        });
    }
}

1 个答案:

答案 0 :(得分:3)

基本上你期待和Array但你收到了一个JSON对象。

正如阿卡什在评论中所说:

Call<List<Test>> getData();

List<Test>就是你期望和Array编写的。您需要为对象Test

编写Call<Test>

您还必须更改回调。