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

Android点击主分类传递对应子分类JSONArray到另一Activity遇异常

解决Android主分类点击传递子分类列表为空的问题

我来帮你搞定这个问题!看了你的代码后,发现三个关键错误导致子分类传递后列表为空,咱们一个个来修正:

1. JSON解析时没填充子分类数据

你在解析主分类的subcategory数组时,只拿到了jArray1,但完全没把里面的子分类数据解析成Pojo2对象,也没放到对应主分类的subCatagoryArrayList里。这就导致每个主分类的子分类列表从一开始就是空的,传递过去自然啥也没有。

修正后的解析代码

final JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, url, jsonObject, new Response.Listener<JSONObject>() {
    @Override
    public void onResponse(JSONObject response) {
        Log.d(TAG, response.toString());
        try {
            JSONArray jArray = response.getJSONArray("data");
            for (int i = 0; i < jArray.length(); i++) {
                JSONObject json_data = jArray.getJSONObject(i);
                Pojo dataPojo = new Pojo();
                dataPojo.setCatagory_id(json_data.getString("category_id"));
                dataPojo.setCatagory_name(json_data.getString("category_name"));
                dataPojo.setCatagory_thumbnailUrl(json_data.getString("category_image"));
                
                // 新增:解析子分类数组并填充到subCatagoryArrayList
                JSONArray jArray1 = json_data.getJSONArray("subcategory");
                ArrayList<Pojo2> subList = new ArrayList<>();
                for (int j = 0; j < jArray1.length(); j++) {
                    JSONObject subJson = jArray1.getJSONObject(j);
                    Pojo2 subPojo = new Pojo2();
                    subPojo.setSubcatagory_id(subJson.getString("subcatagory_id"));
                    subPojo.setSubcatagory_name(subJson.getString("subcatagory_name"));
                    subList.add(subPojo);
                }
                dataPojo.setSubCatagoryArrayList(subList);
                
                dataList.add(dataPojo);
            }
            dataAdapter = new DataAdapter(dataList);
            dataAdapter.setClickListener(jsonDataClickListener);
            RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
            recyclerView.setLayoutManager(mLayoutManager);
            recyclerView.setItemAnimator(new DefaultItemAnimator());
            recyclerView.setAdapter(dataAdapter);
            dataAdapter.notifyDataSetChanged();
        } catch (JSONException e) {
            e.printStackTrace();
            // 别忘了捕获JSON解析异常,避免崩溃
        }
    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        // 这里可以加个错误提示,比如Toast
    }
});

2. 传递数据时传错了对象

你现在传递的是整个主分类列表dataList,但实际上你需要的是当前点击的那个主分类对应的子分类列表,也就是item.getSubCatagoryArrayList()。

修正后的点击事件代码

OnItemClickListener jsonDataClickListener = new OnItemClickListener() {
    @Override
    public void onItemClick(Pojo item) {
        Intent intent = new Intent(MainActivity.this, SubCategoryData.class);
        // 传递当前点击项的子分类列表,而不是整个主分类列表
        intent.putExtra("Key", item.getSubCatagoryArrayList());
        startActivity(intent);
    }
};

3. Pojo2没实现Serializable接口

因为你传递的是ArrayList<Pojo2>,而Serializable要求泛型里的对象也必须是可序列化的。所以必须给Pojo2加上Serializable接口,否则传递的时候会失败,接收方拿到的就是空列表。

修正后的Pojo2类

public class Pojo2 implements Serializable { // 新增Serializable接口
    private String subcatagory_id;
    private String subcatagory_name;

    public String getSubcatagory_id() {
        return subcatagory_id;
    }

    public void setSubcatagory_id(String subcatagory_id) {
        this.subcatagory_id = subcatagory_id;
    }

    public String getSubcatagory_name() {
        return subcatagory_name;
    }

    public void setSubcatagory_name(String subcatagory_name) {
        this.subcatagory_name = subcatagory_name;
    }
}

最后:接收方正确获取数据

确保你在SubCategoryData里是这样接收数据的:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sub_category_data);
    
    // 获取传递过来的子分类列表
    ArrayList<Pojo2> myList = (ArrayList<Pojo2>) getIntent().getSerializableExtra("Key");
    // 现在就可以用myList来初始化你的RecyclerView Adapter了
}

按照这几步修正后,子分类列表应该就能正常传递并显示了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:42:21