You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中Retrofit2解析JSON报错:预期字符串却为BEGIN_ARRAY

解决Retrofit2多表JSON数据获取的两个报错问题

我来帮你一步步拆解并解决这两个棘手的问题!

1. 先处理java.lang.IllegalStateException: Expected a string but was BEGIN_ARRAY错误

这个报错的核心原因很明确:你的ResponseModel类中定义的pesan字段是String类型,但服务器返回的JSON里,$.pesan实际上是一个数组(比如["数据获取成功"]这种格式),Gson解析时类型不匹配就会抛出这个异常。

解决步骤:

  • 先确认服务器返回的完整JSON结构:你可以通过Retrofit的日志拦截器(HttpLoggingInterceptor)打印响应体,或者在回调里直接输出response.body().toString(),看看pesan到底是字符串还是数组。
  • 根据实际结构修改ResponseModel:
    • 如果服务器返回的pesan确实是数组,把字段类型改成List<String>:
      public class ResponseModel {
          String kode;
          List<String> pesan; // 这里从String改成List<String>
          List<QuestionModel> result_question;
      
          // 记得添加getter/setter,或者用@SerializedName注解匹配JSON字段名(如果字段名不一致的话)
      }
      
    • 如果后端可以调整,也可以让他们把pesan改成字符串格式(比如"数据获取成功"),这样你就不用改ResponseModel了。

2. 再解决No adapter attached; skipping layout错误

这个错误通常和RecyclerView的初始化逻辑有关,本质是RecyclerView在渲染时没有绑定任何adapter,可能是因为数据加载失败后adapter一直处于null状态,或者你只在请求成功时才设置adapter。

解决步骤:

  • 提前初始化空adapter:在Activity/Fragment的onCreate或onViewCreated阶段,就给RecyclerView设置一个空的adapter(哪怕数据源是空列表),比如:
    // 初始化RecyclerView和空adapter
    RecyclerView recyclerView = findViewById(R.id.recycler_view);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    List<QuestionModel> emptyList = new ArrayList<>();
    QuestionAdapter adapter = new QuestionAdapter(emptyList);
    recyclerView.setAdapter(adapter);
    
  • 请求成功后更新adapter数据:当Retrofit拿到result_question数据后,直接更新adapter的数据源并通知刷新:
    // Retrofit成功回调里
    adapter.updateData(response.body().getResult_question());
    adapter.notifyDataSetChanged();
    
  • 处理请求失败的情况:在onFailure回调里也要做相应处理(比如显示错误Toast),避免用户看不到任何反馈,同时确保adapter始终处于可用状态。

另外还要注意:检查你的QuestionModel类是否和服务器返回的result_question数组里的每个对象结构完全匹配,字段名、类型都要对应,否则也会导致解析失败,间接引发adapter问题。

内容的提问来源于stack exchange,提问作者ASHafizullah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:53:24