繁体   English   中英

将JSON数据提取到列表中

[英]Fetch JSON Data into List

仅获取列表中第一个事件的天使名称,或者我确实点击了第二个或第三个事件或任何其他事件。

我想每当用户点击事件本田汽车需要显示天使A和B,并且每当用户点击事件塔塔汽车需要显示天使C和D ....我在json中有大约200个事件,超过1000个天使,有些事件有50个,有些事件有200个天使,但是我只需要显示天使以供活动使用.....

JSON:-

[
    {
     "eventName" : "Honda Motors",
     "angelList" : [
    {
    "angelID": "1",
        "angelName": "Angel A"
    },
    {
    "angelID": "2",
        "angelName": "Angel B"
    }
    ]
   },


    {
     "eventName" : "Tata Motors",
     "angelList" : [
    {
    "angelID": "1",
        "angelName": "Angel C"
    },
    {
    "angelID": "2",
        "angelName": "Angel D"
    }
    ]
   }
 ]

例如,第一个EventName是Honda Motors,有两个天使Angel A,B,第二个EventName是Tata Motors,此事件还有两个Angels,分别是Angel C,Angel D ....而我的问题是每当我点击Tata时汽车在列表中显示了天使A,天使B,而不是显示天使C,天使D ...

代码:-

// Creating JSON Parser object
        JSONParser jsonParser = new JSONParser();

        ArrayList<HashMap<String, String>> angelsList;

        // angels JSONArray
        JSONArray arrayAngels = null;

protected String doInBackground(String... args) {
                List<NameValuePair> params = new ArrayList<NameValuePair>();
                // getting JSON string from URL
                String json = jsonParser.makeHttpRequest(EventsActivity.URL_JSON, "GET", params);
                JSONObject jsonData;
                try {
                    jsonData = new JSONArray(json).getJSONObject(0);
                    arrayAngels = jsonData.optJSONArray("angelList");

                    if (arrayAngels != null) {

                        // looping through all angels
                        for (int i = 0; i < arrayAngels.length(); i++) {
                            JSONObject c = arrayAngels.getJSONObject(i);
                            // Storing each json item values in variable
                            String name = c.getString(ANGEL_NAME);                            
                            // creating new HashMap
                            HashMap<String, String> map = new HashMap<String, String>();
                            // adding each child node to HashMap key => value
                            map.put(ANGEL_NAME, name);                          
                            // adding HashList to ArrayList
                            angelsList.add(map);
                        }
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
               }
                return null;
            }

完整代码:-

public class AngelsActivity extends ListActivity {

        // Connection detector
        ConnectionDetector cd;

        // Alert dialog manager
        AlertDialogManager alert = new AlertDialogManager();

        // Progress Dialog
        private ProgressDialog pDialog;

        // Creating JSON Parser object
        JSONParser jsonParser = new JSONParser();

        ArrayList<HashMap<String, String>> angelsList;

        // angels JSONArray
        JSONArray arrayAngels = null;

        String intentEvents = null;

        public static final String LOG_TAG = "AngelsActivity";

        // JSON node names
        private static final String ANGEL_NAME = "angelName";

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_list);

            cd = new ConnectionDetector(getApplicationContext());

            // Check for internet connection
            if (!cd.isConnectingToInternet()) {
                // Internet Connection is not present
                alert.showAlertDialog(AngelsActivity.this, "Internet Connection Error",
                        "Please connect to working Internet connection", false);
                // stop executing code by return
                return;
            }

            // Get EventName using Intent (from EventsActivity)
            Intent i = getIntent();
            intentEvents = (i.getStringExtra("event_name"));

            // Hashmap for ListView
            angelsList = new ArrayList<HashMap<String, String>>();

            // Loading Angels JSON in Background Thread
            new LoadAngels().execute();

            // get listview
            ListView lv = getListView();

            lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> arg0, View view, int arg2,
                        long arg3) {

                }
            });     
        }

        /**
         * Background Async Task to Load all Angels by making http request
         * */
        class LoadAngels extends AsyncTask<String, String, String> {

            /**
             * Before starting background thread Show Progress Dialog
             * */
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                pDialog = new ProgressDialog(AngelsActivity.this);
                pDialog.setMessage("Loading Data ...");
                pDialog.setIndeterminate(false);
                pDialog.setCancelable(false);
                pDialog.show();
            }

            protected String doInBackground(String... args) {
                List<NameValuePair> params = new ArrayList<NameValuePair>();
                // getting JSON string from URL
                String json = jsonParser.makeHttpRequest(EventsActivity.URL_JSON, "GET", params);
                JSONArray jsonData;
                try {
                    jsonData = new JSONArray(json);
                    for (int j = 0; j < jsonData.length(); j++) {
                        arrayAngels = jsonData.getJSONObject(j).optJSONArray("angelList");

                    if (arrayAngels != null) {

                        // looping through all angels
                        for (int i = 0; i < arrayAngels.length(); i++) {
                            Log.d(AngelsActivity.LOG_TAG, "arrayAngels.length " + arrayAngels.length());
                            JSONObject c = arrayAngels.getJSONObject(i);
                            // Storing each json item values in variable
                            String name = c.getString(ANGEL_NAME);                            
                            // creating new HashMap
                            HashMap<String, String> map = new HashMap<String, String>();
                            // adding each child node to HashMap key => value
                            map.put(ANGEL_NAME, name);                          
                            // adding HashList to ArrayList
                            angelsList.add(map);
                        }
                    }
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
               }
                return null;
            }

            /**
             * After completing background task Dismiss the progress dialog
             * **/
            protected void onPostExecute(String file_url) {
                // dismiss the dialog after getting all angels
                pDialog.dismiss();
                // updating UI from Background Thread
                runOnUiThread(new Runnable() {
                    public void run() {
                        /**
                         * Updating parsed JSON data into ListView
                         * */
                        ListAdapter adapter = new SimpleAdapter(
                                AngelsActivity.this, angelsList,
                                R.layout.list_item, 
                                new String[] {ANGEL_NAME}, 
                                new int[] {R.id.name });

                        // updating listview
                        setListAdapter(adapter);

                        // Change activity Title with Event Name
                        setTitle(intentEvents);
                    }
                });
            }
        }
    }

在您的适配器中,更改jsonData = new JSONArray(json).getJSONObject(0); 通过jsonData = new JSONArray(json).getJSONObject(yourPosition);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM