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

使用Volley请求接口时出现RecyclerView无适配器及Gson解析异常问题

问题解决方案

1. 修复Gson解析报错

报错原因是你返回的JSON外层是对象结构,而非直接的PoetryModel数组,因此需要新增一个外层响应实体类适配接口结构:

步骤1:新建ApiResponse.java

package com.example.poetryapp.model;

import java.util.List;

public class ApiResponse {
    private String status;
    private String message;
    private List<PoetryModel> data;

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public List<PoetryModel> getData() {
        return data;
    }

    public void setData(List<PoetryModel> data) {
        this.data = data;
    }
}

步骤2:修改MainActivity的onResponse解析逻辑

@Override
public void onResponse(String response) {
    Log.e("success",response);
    Gson gson = new GsonBuilder().create();
    // 解析为外层响应对象
    ApiResponse apiResponse = gson.fromJson(response, ApiResponse.class);
    // 状态判断后取数据
    if ("1".equals(apiResponse.getStatus()) && apiResponse.getData() != null) {
        PoetryModel[] data = apiResponse.getData().toArray(new PoetryModel[0]);
        MyAdapter myAdapter = new MyAdapter(data);
        recyclerView.setAdapter(myAdapter);
    } else {
        Toast.makeText(MainActivity.this, apiResponse.getMessage(), Toast.LENGTH_LONG).show();
    }
}

2. 修复RecyclerView「No adapter attached」警告

该警告是因为Volley请求是异步的,页面首次绘制时RecyclerView还未设置Adapter,在onCreate初始化时提前设置空Adapter即可:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    recyclerView = findViewById(R.id.poetry_recyclerView);
    recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));
    // 提前设置空Adapter消除警告
    recyclerView.setAdapter(new MyAdapter(new PoetryModel[0]));
    loaddata();
}

3. 其他常见问题排查

  • 检查接口URL笔误:你当前的URL后缀写了两次.php,修正为http://192.168.137.198/poetryapi/getPoetryRead.php
  • 确认AndroidManifest.xml已添加网络权限:
    <uses-permission android:name="android.permission.INTERNET" />
    
  • 安卓9及以上默认禁止明文HTTP请求,需配置网络安全策略允许HTTP访问:
    在res/xml目录新建network_security_config.xml:
    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <base-config cleartextTrafficPermitted="true" />
    </network-security-config>
    
    然后在AndroidManifest.xml的application标签添加属性:
    android:networkSecurityConfig="@xml/network_security_config"
    
  • 确认手机和XAMPP服务端处于同一局域网,IP地址可正常访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:15:01