【问题标题】:Getting error: Expected BEGIN_ARRAY but was STRING at line 1 column 1 path $出现错误:预期 BEGIN_ARRAY 但在第 1 行第 1 列路径 $
【发布时间】:2017-05-30 11:55:18
【问题描述】:

我收到此错误:

java.lang.IllegalStateException:应为 BEGIN_ARRAY,但在第 1 行第 1 列路径 $

当我试图得到回应时。

我得到的 JSON 响应如下:

[  
   {  
      "site":"bash.im",
      "name":"bash",
      "desc":"Цитатник Рунета",
      "link":"/url.html?url=http%3A%2F%2Fbash.im%2Fquote%2F445088",
      "elementPureHtml":"Text"
   },
   {  
      "site":"bash.im",
      "name":"bash",
      "desc":"Цитатник Рунета",
      "link":"/url.html?url=http%3A%2F%2Fbash.im%2Fquote%2F445087",
      "elementPureHtml":"Text"
   },
   {  
      "site":"bash.im",
      "name":"bash",
      "desc":"Цитатник Рунета",
      "link":"/url.html?url=http%3A%2F%2Fbash.im%2Fquote%2F445086",
      "elementPureHtml":"Text"
   }
]

我的模型课:

public class PostModel {

@SerializedName("site")
@Expose
private String site;
@SerializedName("name")
@Expose
private String name;
@SerializedName("desc")
@Expose
private String desc;
@SerializedName("link")
@Expose
private String link;
@SerializedName("elementPureHtml")
@Expose
private String elementPureHtml;

public String getSite() {
    return site;
}

public void setSite(String site) {
    this.site = site;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getDesc() {
    return desc;
}

public void setDesc(String desc) {
    this.desc = desc;
}

public String getLink() {
    return link;
}

public void setLink(String link) {
    this.link = link;
}

public String getElementPureHtml() {
    return elementPureHtml;
}

public void setElementPureHtml(String elementPureHtml) {
    this.elementPureHtml = elementPureHtml;
}

}

连接类:

    public class App extends Application {

    private static UmoriliApi umoriliApi;

    @Override
    public void onCreate() {
        super.onCreate();

        HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
        interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build();

        Gson gson = new GsonBuilder()
                .setLenient()
                .create();

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://www.umori.li/")
                .client(client)
                .addConverterFactory(GsonConverterFactory.create(gson))
                .build();
        umoriliApi = retrofit.create(UmoriliApi.class);
    }

    public static UmoriliApi getApi() {
        return umoriliApi;
    }
}

和 MainActivity:

    public class MainActivity extends AppCompatActivity {

    List<PostModel> posts;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        posts = new ArrayList<>();

        App.getApi().getData("bash", 50).enqueue(new Callback<List<PostModel>>() {

            @Override
            public void onResponse(Call<List<PostModel>> call, Response<List<PostModel>> response) {
                posts.addAll(response.body());
            }


            @Override
            public void onFailure(Call<List<PostModel>> call, Throwable t) {
                t.printStackTrace();
                Toast.makeText(MainActivity.this, "An error occurred during networking", Toast.LENGTH_SHORT).show();
            }
        });
    }
}

将不胜感激任何帮助或提示。

【问题讨论】:

  • 响应中有错误,这就是 gson 无法将响应转换为模型类的原因。
  • 我认为错误出在 Web 服务响应中,您可以在浏览器上测试请求以确保它与您的模型匹配
  • @Badr,我使用 jsonschema2pojo.org 服务根据 json 响应制作了我的模型
  • @Jaydeep Patel,你能提示一下,到底哪里出错了?
  • 在 post man 中检查 web 服务。可能存在参数或响应问题。

标签: android json retrofit2


【解决方案1】:

尝试清理构建器构建->清理它工作的项目

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    • 1970-01-01
    • 2019-07-20
    • 1970-01-01
    • 2017-02-15
    • 1970-01-01
    相关资源
    最近更新 更多