【问题标题】:how to pass JsonArray from one activity to another如何将 JsonArray 从一个活动传递到另一个活动
【发布时间】:2018-05-19 06:25:00
【问题描述】:

我会关注这个 SO 链接,但对我没有帮助:

我正在尝试将 JSon 子类别数据从一个活动发送到另一个活动

见下面的Json格式:

在上面的 Json 中,data 是获取主类别的,subcategory 获取子数据

现在我将在一个活动中完美地获取这两个数据。

但是我正在尝试单击主类别的数据,并且每个主要子类别数据都传递给另一个活动

请看下图理解:

希望所有用户都得到我

现在我尝试了这个

MainActivity.java 类用于获取 JsonData:

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"));
                        dataList.add(dataPojo);

                        JSONArray jArray1 = json_data.getJSONArray("subcategory");

                    }

                    dataAdapter = new DataAdapter(dataList);
                    dataAdapter.setClickListener(jsonDataClickListener);
                    RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
                    recyclerView.setLayoutManager(mLayoutManager);
                    recyclerView.setItemAnimator(new DefaultItemAnimator());
                    //recyclerView.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL));
                    recyclerView.setAdapter(dataAdapter);
                    dataAdapter.notifyDataSetChanged();

                }

MainActivity.java 传递子类别的类:

OnItemClickListener jsonDataClickListener = new OnItemClickListener() {
    @Override
    public void onItemClick(Pojo item) {
        Intent intent = new Intent(MainActivity.this, SubCategoryData.class);
        intent.putExtra("Key", (Serializable) dataList);
        startActivity(intent);
    }
};

在上面的代码中,它给我一个myList,大小是0

Pojo.java 模型类:

公共类 Pojo 扩展 Base 实现 Serializable{

    private String catagory_id;
    private String catagory_name;
    private String catagory_thumbnailUrl;
    private String childListSize;
    private ArrayList<Pojo2> subCatagoryArrayList;

    public ArrayList<Pojo2> getSubCatagoryArrayList() {
        return subCatagoryArrayList;
    }

    public void setSubCatagoryArrayList(ArrayList<Pojo2> subCatagoryArrayList) {
        this.subCatagoryArrayList = subCatagoryArrayList;
    }

    public String getCatagory_id() {
        return catagory_id;
    }

    public void setCatagory_id(String catagory_id) {
        this.catagory_id = catagory_id;
    }

    public String getCatagory_name() {
        return catagory_name;
    }

    public void setCatagory_name(String catagory_name) {
        this.catagory_name = catagory_name;
    }

    public String getCatagory_thumbnailUrl() {
        return catagory_thumbnailUrl;
    }

    public void setCatagory_thumbnailUrl(String catagory_thumbnailUrl) {
        this.catagory_thumbnailUrl = catagory_thumbnailUrl;
    }

}

Pojo2.java 子类别的模型类:

public class Pojo2  {

    private String subcatagory_id;
    private String subcatagory_name;

    /*public Pojo2(String SubId, String SubName){
        super(SubId, SubName);
    }*/

    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;
    }
}

更新

当我使用@Birju 回答发送ArrayList 时,它对我有用,但是在我接收数据的地方却给了我一个错误。

java.util.ArrayList cannot be cast to java.lang.String

为了接收数据,我将使用以下代码:

Intent intent = getIntent();
        Bundle b = intent.getExtras();

        if(b!=null)
        {

            String j =(String) b.getSerializable("Key");
            subId.setText(j);
        }

但每次都会出现上述错误我该如何解决

【问题讨论】:

    标签: java android json arraylist


    【解决方案1】:

    Onclicklistner

    ArrayList<Pojo> myList = new ArrayList<Pojo>(); // do not create new list....
                                                    // every time creation its by default empty
    intent.putExtra("SubCategory",myList);// use "dataList" instade of mylist
    

    您需要传递从 json response 获得的 dataList 而不是 mylist

    【讨论】:

    【解决方案2】:

    由于您使用Serializable 接口来传递您的数据:

    1. 您必须确保所有内部字段属性可序列化 => 您的 Pojo2 还必须实现 Serializable

    2. 在您收到的活动中,调用:

      List<Pojo> story = (List<Pojo>) intent.getSerializableExtra("SubCategory");
      

      取回数据。

    【讨论】:

    • 第一个想法是我想知道如何传递subcategory 数据。 ? 之后我想收到
    • 您的jsonDataClickListener 已经传递了数据。您只需将所需的数据添加到 ArrayList&lt;Pojo&gt; myList
    • 确定它的大小是0。你必须添加像:myList.add(item)。这段代码是你写的吗?
    • 我会为 dataList.add(dataPojo); 之类的主要类别数据编写代码,但对于 myList 我将编写此行 ArrayList&lt;Pojo&gt; myList = new ArrayList&lt;Pojo&gt;();
    • 然后将项目添加到myList
    【解决方案3】:

    让所有响应 pojo 类实现 Serializable 然后像这样传递..

      Intent intent = new Intent(UserInputActivity.this,MapsActivity.class);
                    intent.putExtra("Response", response1);
                    startActivity(intent);
    

    然后像这样在下一个活动中获取数据..

            response = (Response) getIntent().getSerializableExtra("Response");
    

    尝试像这样发送pojo的arrya..

        private List<ReviewsItem>reviewsItems=new ArrayList<>();
                    Intent intent=new Intent(PlaceDetails.this,ReviewDetailsActivity.class);
                intent.putExtra("Review", (Serializable) reviewsItems);
                startActivity(intent);
    

    下一个活动.. 调用 oncreate 方法。

      private List<ReviewsItem>reviewsItems=new ArrayList<>();
      reviewsItems= (List<ReviewsItem>) getIntent().getSerializableExtra("Review");
    

    【讨论】:

    • 您可以将您的 pojo 类传递到上面的代码列表中,只是示例。
    • 而你的答案是将模型类转换为ArrayList 但我不想要这个我只想简单地传递 ArrayList 没有别的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 2011-10-27
    • 2012-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多