如何使用 Listview 访问多个 JSONArray?

How to access Multiple JSONArrays with Listview?

我有两个 Listview,我从服务器得到两个 JSONArray,我得到以下响应

[
    [
        {
            "user_status": "1",
            "pooja_name": "Festival Sevas",
            "sess_date": "Mon Nov 30 2015",
            "session_status": "Completed",
            "message": "What ever message you want"
        }
    ],
    [
        {
            "user_status": "1",
            "pooja_name": "Pushpalankara Seva",
            "sess_date": "Tue Dec 15 2015",
            "session_status": "Pending",
            "message": "What ever message you want"
        }
    ]
]

我能够解析这两个数组,但在我的两个 listview 中它显示 Pushpalankara Seva,我正在尝试的是在我的第一个列表视图中我想显示 Pushpalankara Seva 和在第二个 Festival Sevas

class LoadPoojas extends AsyncTask<String, String, ArrayList<HashMap<String,String>>> {
        /**
         * Before starting background thread Show Progress Dialog
         * */
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(AboutUsFragment.this.getActivity());
            pDialog.setMessage("Loading...");
            pDialog.setIndeterminate(true);
            pDialog.setIndeterminateDrawable(getResources().getDrawable(R.drawable.custom_progress));
            pDialog.setCancelable(false);
            pDialog.show();
        }
        protected ArrayList<HashMap<String,String>> doInBackground(String... args) {
            ServiceHandler sh = new ServiceHandler();
            // Making a request to url and getting response
            ArrayList<HashMap<String,String>> data = new ArrayList<HashMap<String, String>>();
            ArrayList<HashMap<String,String>> upcomingdata = new ArrayList<HashMap<String, String>>();
            String jsonStr = sh.makeServiceCall(POOJA_LISTING_URL, ServiceHandler.GET);
            map = new HashMap<String, String>();
            Log.d("Response: ", "> " + jsonStr);

            if (jsonStr != null) {
                try {
                    JSONArray jsonObj = new JSONArray(jsonStr);

                    // Getting JSON Array node

                    JSONArray pastarray = jsonObj.getJSONArray(0);
                    for (int i = 0; i < pastarray.length(); i++) {
                        JSONObject c = pastarray.getJSONObject(i);
                        // creating new HashMap

                        // adding each child node to HashMap key => value
                        map.put(POOJA_LISTING_NAME, c.getString(POOJA_LISTING_NAME));


                    }


                    JSONArray upcoming = jsonObj.getJSONArray(1);
                    for (int i = 0; i < upcoming.length(); i++) {
                        JSONObject c = upcoming.getJSONObject(i);
                        // creating new HashMap
                      //  HashMap<String, String> upcomingmap = new HashMap<String, String>();
                        // adding each child node to HashMap key => value
                        map.put(POOJA_LISTING_NAME, c.getString(POOJA_LISTING_NAME));



                    }
                    data.add(map);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            } else {
                Log.e("ServiceHandler", "Couldn't get any data from the url");
            }
            return data;
        }
        protected void onPostExecute(ArrayList<HashMap<String,String>> result) {
            super.onPostExecute(result);
            /*if(interestaccept == null || interestaccept.length() == 0){
                // Toast.makeText(getApplicationContext(), "No response", Toast.LENGTH_SHORT).show();
                noacpt.setText("  No Accepted List  ");
            }
            else
            {
                noacpt.setVisibility(View.INVISIBLE);
            }*/
            // dismiss the dialog after getting all albums
            if (pDialog.isShowing())
                pDialog.dismiss();
            // updating UI from Background Thread

            aList = new ArrayList<HashMap<String, String>>();
            aList.addAll(result);
            adapter = new CustomAdapterPooja(getActivity(),result);
            completedpooja.setAdapter(adapter);
            adapterupcoming = new CustomAdapterPoojaUpcoming(getActivity(),result);
            notcompletedpooja.setAdapter(adapterupcoming);
            adapter.notifyDataSetChanged();
            adapterupcoming.notifyDataSetChanged();



            completedpooja.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {


                }
            });


           /* upcomingaList = new ArrayList<HashMap<String, String>>();
            upcomingaList.addAll(result);
            adapterupcoming = new CustomAdapterPoojaUpcoming(getActivity(),result);
            notcompletedpooja.setAdapter(adapterupcoming);

            adapterupcoming.notifyDataSetChanged();

            notcompletedpooja.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {


                }
            });*/

        }

    }

我检查了你的代码,发现你在 hashmap 中用相同的键 在两个数组(在两个 For 循环内)中犯了错误。所以它根据 hashmap 的规则用最新的值覆盖。

解决方案

选项 1:获取 hashmap 的数组列表并为每个新记录创建新的 hashmap。

选项 2: 获取 POJO class 的数组列表。

编辑:

public class UserPOJO {


    public String user_status;
    public String pooja_name;
    public String sess_date;
    public String session_status;
    public String message;

}

获取 POJO class 的数组列表,如下所示

public ArrayList<UserPOJO> userPOJOs = new ArrayList<UserPOJO>();

现在将数据从 JSONArray 插入到数组列表中。