簡體   English   中英

錯誤JSONArray無法轉換為JSONObject

[英]Error JSONArray cannot be converted to JSONObject

我創建了一個應用程序以將Json數據從服務器解析到我的應用程序。 但是現在當我運行項目時,我無法將JSONArray轉換為JSONObject異常。我在LogCat視圖中獲得了所有服務器數據,但在應用程序中卻沒有。 我嘗試了不同的方法,但是沒有運氣。 謝謝。

//這是我的主要代碼

    public class jsonExample2 extends Activity{
            // This is the url that i try to get data
        private static String url = "http://api.worldbank.org/countries/ir?format=json";
        private static final String PAGE = "page";
        private static final String VALUE = "value";
        private static final String NAME = "name";
        private static final String GEO = "region";

        JSONArray page = null;
            @Override
            protected void onCreate(Bundle savedInstanceState) {

                super.onCreate(savedInstanceState);
                setContentView(R.layout.activitybw);
                new GetJSONTask().execute(url);

            }

            class GetJSONTask extends AsyncTask<String, Void, JSONObject> {

                protected JSONObject doInBackground(String... urls) {
                    try {
                        JSONParser jParser = new JSONParser();
                        return jParser.getJSONFromUrl(urls[0]);
                    } catch (Exception e) {
                        return null;
                    }
                }

                protected void onPostExecute(JSONObject json) {
                    // do all the parsing here:
                    try {

                        page = json.getJSONArray(PAGE);
                        JSONObject c = page.getJSONObject(0);


                        String value = c.getString(VALUE);
                        String name = c.getString(NAME);
                        String geo = c.getString(GEO);

                        final TextView id1 = (TextView) findViewById(R.id.id);
                        final TextView name1 = (TextView) findViewById(R.id.name);
                        final TextView geo1 = (TextView) findViewById(R.id.geo);

                        id1.setText(value);
                        name1.setText(name);
                        geo1.setText(geo);
                    }
                    catch (JSONException e)
                    {
                        e.printStackTrace();
                    }
                } 
           }        
    }

// JSONParser類

    public class JSONParser {

        static InputStream is = null;
        static JSONObject jObj = null;
        static String json = "";

        public JSONParser() {

        }

        public JSONObject getJSONFromUrl(String url) {

            // Making HTTP request
            try {
                // defaultHttpClient
                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost(url);

                HttpResponse httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();
                is = httpEntity.getContent();           

            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

            try {
                BufferedReader reader = new BufferedReader(new InputStreamReader(
                        is, "iso-8859-1"), 8);
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                    sb.append(line + "\n");
                }
                is.close();
                json = sb.toString();
            } catch (Exception e) {
                Log.e("Buffer Error", "Error converting result " + e.toString());
            }

            try {
                jObj = new JSONObject(json);
            } catch (JSONException e) {
                Log.e("JSON Parser", "Error parsing data " + e.toString());
            }
            return jObj;
        }

    }

//這是我的logCat視圖

    03-19 09:11:52.776: D/dalvikvm(1376): GC_CONCURRENT freed 129K, 10% free 2629K/2904K, paused 75ms+101ms, total 286ms
    03-19 09:11:52.846: E/JSON Parser(1376): Error parsing data org.json.JSONException: Value [{"total":1,"page":1,"per_page":"50","pages":1},[{"region":{"value":"Middle East & North Africa (all income levels)","id":"MEA"},"id":"IRN","incomeLevel":{"value":"Upper middle income","id":"UMC"},"name":"Iran, Islamic Rep.","iso2Code":"IR","lendingType":{"value":"IBRD","id":"IBD"},"longitude":"51.4447","latitude":"35.6878","capitalCity":"Tehran","adminregion":{"value":"Middle East & North Africa (developing only)","id":"MNA"}}]] of type org.json.JSONArray cannot be converted to JSONObject
    03-19 09:11:52.846: D/AndroidRuntime(1376): Shutting down VM
    03-19 09:11:52.855: W/dalvikvm(1376): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
    03-19 09:11:52.876: E/AndroidRuntime(1376): FATAL EXCEPTION: main
    03-19 09:11:52.876: E/AndroidRuntime(1376): java.lang.NullPointerException
    03-19 09:11:52.876: E/AndroidRuntime(1376):     at com.example.mediaplayerapp.jsonExample2$GetJSONTask.onPostExecute(jsonExample2.java:79)
  try {
     jObj = new JSONObject(json);
  } catch (JSONException e) {
     Log.e("JSON Parser", "Error parsing data " + e.toString());
  }

這是錯誤的。 您正在獲取JSONArray但正在將其轉換為JSONObject 改變它

try {
     if (json != null)
       return new JSONArray(json);
  } catch (JSONException e) {
     Log.e("JSON Parser", "Error parsing data " + e.toString());
  }

暫無
暫無

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

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