java - retrofit 2 : Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $

标签 java android json retrofit2

我正在使用 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/

相关文章:

android - 如何在 onPrepareDialog() 中更改 AlertDialog 的消息(正文)?

java - jsp中通过ajax获取json对象

android - 使用 Volley 进行响应处理

java - Mule 3.2 中的分离器

java - 将 'If' 语句的部分内容留空(快速简单的问题)

android - 无法在 Android 中输入 AutoCompleteTextView

android - PolylineOptions .color() 不工作

javascript - 使用 Codeigniter 发布 JSON 返回 500 错误

java - 如何从 java 类路径中的网络目录正确加载资源?

Java内存使用