簡體   English   中英

使用JSON獲取數據

[英]Fetch data using JSON

我正在編寫一個應用程序,其中我使用JSON將數據提取到ListView中,並且我已經獲取了第一級(eventName)的數據,但是在獲取第二級(angelName)時獲取空白活動...

JSON: -

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

總之,無法獲得AngelName,

AngelsActivity.java:-

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;

        // albums JSONArray
        JSONArray arrayAngels = null;

        // Category name
        String category_Name;

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

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

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

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

            // Loading Albums JSON in Background Thread
            new LoadAlbums().execute();

            // get listview
            ListView lv = getListView();

            /**
             * Listview item click listener
             * TrackListActivity will be lauched by passing album id
             * */
            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 Albums by making http request
         * */
        class LoadAlbums 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("Listing Angels ...");
                pDialog.setIndeterminate(false);
                pDialog.setCancelable(false);
                pDialog.show();
            }

            /**
             * getting Categories JSON
             * */
            protected String doInBackground(String... args) {
                // Building Parameters
                List<NameValuePair> params = new ArrayList<NameValuePair>();

                // getting JSON string from URL
                String json = jsonParser.makeHttpRequest(EventsActivity.URL_CATEGORIES, "GET",
                        params);

                try {               
                    arrayAngels = new JSONArray(json);

                    if (arrayAngels != null) {

                        // looping through All albums
                        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);
                        }
                    }else{
                        Log.d("Angels: ", "null");
                    }

                } 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 albums
                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.category_name });

                        // updating listview
                        setListAdapter(adapter);
                    }
                });
            }
        }
    }

您似乎沒有在正確的級別獲取JSONArray。

您獲得的JSONArray arrayAngels實際上是一個只包含一個元素的數組。 要獲得包含天使的數組,您需要更深入:

JSONArray allAngels = arrayAngels.getJSONObject(0).getJSONArray("angelList");

從數據中獲取的第一個JSONArray是一個包含所有內容的元素數組。 該數組中包含的第一個(也是唯一的)JSONObject仍包含您的所有數據。 只有當你從該對象獲得JSONArray時才能得到你想要的東西。

編輯:完整的代碼示例:

JSONObject jsonData = new JSONArray(json).getJSONObject(0);
arrayAngels = jsonData.optJSONArray("angelList");

if (arrayAngels != null) {
    // Code to process arrayAngels
}

如果你想也使用它,jsonData也包含eventName數據。 請注意,如果getJSONArray()無法找到您想要的密鑰,則拋出異常,因此最好使用optJSONArray,如果密鑰不在數據中,則返回null。

嘗試這個,

protected String doInBackground(String... args) {
                List<NameValuePair> params = new ArrayList<NameValuePair>();

                // getting JSON string from URL
                String json = jsonParser.makeHttpRequest(EventsActivity.URL_CATEGORIES, "GET",
                        params);

                try {               
                    arrayAngels = new JSONArray(json).getJSONObject(0).getJSONArray("angelList");

                    if (arrayAngels != null) {

                        // looping through All albums
                        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);
                        }
                    }else{
                        Log.d("Angels: ", "null");
                    }

                } catch (JSONException e) {
                    e.printStackTrace();
                }

                return null;
            }

嘗試這個..

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);
        JSONArray angels = c.getJSONArray("angelList");
        for (int j = 0; j < angels.length(); j++) {
             JSONObject c1 = arrels.getJSONObject(j);
             Log.v("angelName",c1.getString(ANGEL_NAME));
        }
}

你必須先獲得Json數組“angelList”,然后才能得到angelName值。

JSONArray arra = new JSONArray(json);

JSONObject jobj=arra.getJSONObject(0);

   arrayAngels = jobj.getJSONArray("angelList");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM