如何使用Listview访问多个JSONArrays?

时间:2015-12-09 05:52:01

标签: android json android-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和第二个节日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) {


                }
            });*/

        }

    }

1 个答案:

答案 0 :(得分:1)

我检查了你的代码,发现你在两个数组中都有错误的 hashmap with same key (在两个For循环中)。因此它会根据hashmap的规则覆盖最新值。

解决方案

选项1:获取hashmap的arraylist并为每个新记录创建新的hashmap。

选项2:参加POJO课程的arraylist。

编辑:

public class UserPOJO {


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

}

参加下面的POJO课程的arraylist

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

现在从JSONArray在arraylist中插入数据。