簡體   English   中英

JSON解析失敗Android Studio

[英]JSON Parsing fail android studio

當我運行我的應用程序時,出現此異常。 我的代碼在我的第一個json解析應用中使用時正常運行。 但是,當我在新應用程序中實現代碼時,出現了此異常。 但是其他代碼正常工作。

07-29 11:48:38.269    4670-4767/com.fingerspot.mencobaagain W/System.err﹕ at org.json.JSON.typeMismatch(JSON.java:111)
07-29 11:48:38.269    4670-4767/com.fingerspot.mencobaagain W/System.err﹕ at org.json.JSONArray.<init>(JSONArray.java:96)
07-29 11:48:38.269    4670-4767/com.fingerspot.mencobaagain W/System.err﹕ at org.json.JSONArray.<init>(JSONArray.java:108)
07-29 11:48:38.269    4670-4767/com.fingerspot.mencobaagain W/System.err﹕ at com.fingerspot.mencobaagain.Product$LoadUsers.doInBackground(Product.java:89)
07-29 11:48:38.279    4670-4767/com.fingerspot.mencobaagain W/System.err﹕ at com.fingerspot.mencobaagain.Product$LoadUsers.doInBackground(Product.java:59)
07-29 11:48:38.289    4670-4767/com.fingerspot.mencobaagain W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:288)
07-29 11:48:38.289    4670-4679/com.fingerspot.mencobaagain I/dalvikvm﹕ Total arena pages for JIT: 14
07-29 11:48:38.289    4670-4767/com.fingerspot.mencobaagain W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:237)
07-29 11:48:38.289    4670-4679/com.fingerspot.mencobaagain I/dalvikvm﹕ Total arena pages for JIT: 15
07-29 11:48:38.299    4670-4679/com.fingerspot.mencobaagain I/dalvikvm﹕ Total arena pages for JIT: 16
07-29 11:48:38.299    4670-4679/com.fingerspot.mencobaagain I/dalvikvm﹕ Total arena pages for JIT: 17
07-29 11:48:38.299    4670-4767/com.fingerspot.mencobaagain W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
07-29 11:48:38.299    4670-4679/com.fingerspot.mencobaagain I/dalvikvm﹕ Total arena pages for JIT: 18
07-29 11:48:38.299    4670-4679/com.fingerspot.mencobaagain I/dalvikvm﹕ Total arena pages for JIT: 19
07-29 11:48:38.299    4670-4767/com.fingerspot.mencobaagain W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
07-29 11:48:38.299    4670-4767/com.fingerspot.mencobaagain W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
07-29 11:48:38.309    4670-4679/com.fingerspot.mencobaagain I/dalvikvm﹕ Total arena pages for JIT: 20
07-29 11:48:38.309    4670-4767/com.fingerspot.mencobaagain W/System.err﹕ at java.lang.Thread.run(Thread.java:841)

這是代碼

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

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

        // Check your log cat for JSON reponse
        Log.d("Albums JSON: ", "> " + json);

        try {
            users = new JSONArray(json);

            if (users != null) {
                // looping through All albums

                for (int i = 0; i < users.length(); i++) {
                    JSONObject c = users.getJSONObject(i);
                    Toast.makeText(getBaseContext(),"errrrrrorrrrr",Toast.LENGTH_LONG).show();
                    // Storing each json item values in variable
                    String user_id = c.getString("user_id");
                    String name = c.getString("name");
                    String email = c.getString("email");
                    String display_name = c.getString("display_name");
                    String phone = c.getString("phone");
                    String ym = c.getString("ym");
                    String created_at = c.getString("created_at");
                    String last_login = c.getString("last_login");
                    String updated_at = c.getString("updated_at");
                    // creating new HashMap
                    //HashMap<String, String> map = new HashMap<String, String>();

                    items.add(new ProductClass(Integer.parseInt(user_id), name, email, display_name,phone, ym, created_at, last_login, updated_at));
                }
            }else{
                Log.d("Users: ", "null");
            }

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

我期望獲取json對象的代碼有問題。

注意:我在舊應用程序和新應用程序上使用的json是相同的。

我的json對象

{"DataUser":[{"user_id":1,"name":"Admin HO","email":"admin@kitasatu.net","display_name":null,"phone":null,"ym":null,"status":0,"location_id":0,"last_login":"2015-07-07 07:51:12","active":1,"created_at":"2015-05-02 00:00:00","updated_at":"2015-07-07 07:51:12"}]}

您應該首先將json字符串解析為JSON Object。

    {
    "DataUser":[
        {
        "user_id":1,
        "name":"Admin HO",
        "email":"admin@kitasatu.net",
        "display_name":null,
        "phone":null,
        "ym":null,
        "status":0,
        "location_id":0,
        "last_login":"2015-07-07 07:51:12",
        "active":1,
        "created_at":"2015-05-02 00:00:00",
        "updated_at":"2015-07-07 07:51:12"
        }
    ]
   }

之后,您應該從先前解析的JSON對象獲取json數組。 “ DataUser”

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

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

        // Check your log cat for JSON reponse
        Log.d("Albums JSON: ", "> " + json);

        JSONObject jsonObj = new JSONObject(json);

        try {
            users = jsonObj.getJSONArray("DataUser");

            if (users != null) {
                // looping through All albums

                for (int i = 0; i < users.length(); i++) {
                    JSONObject c = users.getJSONObject(i);
                    Toast.makeText(getBaseContext(),"errrrrrorrrrr",Toast.LENGTH_LONG).show();
                    // Storing each json item values in variable
                    String user_id = c.getString("user_id");
                    String name = c.getString("name");
                    String email = c.getString("email");
                    String display_name = c.getString("display_name");
                    String phone = c.getString("phone");
                    String ym = c.getString("ym");
                    String created_at = c.getString("created_at");
                    String last_login = c.getString("last_login");
                    String updated_at = c.getString("updated_at");
                    // creating new HashMap
                    //HashMap<String, String> map = new HashMap<String, String>();

                    items.add(new ProductClass(Integer.parseInt(user_id), name, email, display_name,phone, ym, created_at, last_login, updated_at));
                }
            }else{
                Log.d("Users: ", "null");
            }

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

我知道這不是解決您問題的方法,但是您應該使用GSON解析json響應。許多開源項目都在使用gson。由於GSON增加了代碼的可讀性並使解析時間比傳統方法減少了30%。 以下教程將幫助您理解它。 http://kylewbanks.com/blog/Tutorial-Android-Parsing-JSON-with-GSON

GSon.jar下載Gson.jar

如果在創建gson模型時遇到問題,則可以從Gson模型在線創建它們

暫無
暫無

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

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