2013-12-18 16 views
5

Liên kết là http://iipacademy.in/askpoll/ten_feed.phpJSON loại không phù hợp hoặc org.json.jsonecxeption

ngoại lệ là trong onPostExecute() phương pháp (dòng thứ 4):

Log.i("result", result); 
try { 
    if (result != null) { 
     JSONArray jsonArray = new JSONArray(result); // erreor 
     for (int i = 0; i < jsonArray.length(); i++) { 
      JSONObject objJson = jsonArray.getJSONObject(i); 

      TopTenGetterSetter obj = new TopTenGetterSetter(); 


      obj.setQ(objJson.getString("question")); 
      obj.setA(objJson.getString("option1")); 
      obj.setB(objJson.getString("option2")); 
      obj.setC(objJson.getString("option3")); 
      obj.setD(objJson.getString("option4")); 

      polls.add(obj); 
         } 

    } 
} catch (JSONException e) { 
    e.printStackTrace(); 
    Toast.makeText(getApplicationContext(), "error", 
      Toast.LENGTH_SHORT).show(); 
} 

logcat:

12-18 03:20:45.447: W/System.err(2790): org.json.JSONException: Value response of type java.lang.String cannot be converted to JSONArray 
12-18 03:20:45.447: W/System.err(2790):  at org.json.JSON.typeMismatch(JSON.java:111) 
12-18 03:20:45.447: W/System.err(2790):  at org.json.JSONArray.<init>(JSONArray.java:91) 
12-18 03:20:45.447: W/System.err(2790):  at org.json.JSONArray.<init>(JSONArray.java:103) 
12-18 03:20:45.447: W/System.err(2790):  at com.example.askpollie.LatestPollParticipated$FetchingEventsDetails.onPostExecute(LatestPollParticipated.java:188) 
12-18 03:20:45.447: W/System.err(2790):  at com.example.askpollie.LatestPollParticipated$FetchingEventsDetails.onPostExecute(LatestPollParticipated.java:1) 
12-18 03:20:45.447: W/System.err(2790):  at android.os.AsyncTask.finish(AsyncTask.java:631) 
12-18 03:20:45.447: W/System.err(2790):  at android.os.AsyncTask.access$600(AsyncTask.java:177) 
12-18 03:20:45.447: W/System.err(2790):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644) 
12-18 03:20:45.447: W/System.err(2790):  at android.os.Handler.dispatchMessage(Handler.java:99) 
12-18 03:20:45.447: W/System.err(2790):  at android.os.Looper.loop(Looper.java:137) 
12-18 03:20:45.447: W/System.err(2790):  at android.app.ActivityThread.main(ActivityThread.java:5103) 
12-18 03:20:45.447: W/System.err(2790):  at java.lang.reflect.Method.invokeNative(Native Method) 
12-18 03:20:45.447: W/System.err(2790):  at java.lang.reflect.Method.invoke(Method.java:525) 
12-18 03:20:45.447: W/System.err(2790):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
12-18 03:20:45.447: W/System.err(2790):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
12-18 03:20:45.447: W/System.err(2790):  at dalvik.system.NativeStart.main(Native Method) 
12-18 03:20:45.447: D/dalvikvm(2790): GC_FOR_ALLOC freed 5131K, 55% free 4437K/9672K, paused 2ms, total 2ms 

nhắn là một mảng vì vậy những gì nên được mã của nó hoặc làm thế nào để nó có thể được giải quyết?

Cảm ơn trong số trước. . .

+0

cho webservice trả về 'JSONObject' làm phần tử gốc thay vì' JSONArray' –

+0

bạn có thể sử dụng một cái gì đó như 'new org.json.simple.parser.JSONParser(). Parse (" jsonString ");' để lấy JsonArray. – Runcorn

+0

đăng dữ liệu json của bạn –

Trả lời

16
org.json.JSONException: Value response of type java.lang.String cannot be converted to JSONArray 

Có vẻ như câu trả lời là một chuỗi không phải là một mảng json

{ // json object node 
    "response": { // json object response 
     "result": 1, 
     "Message": [ // json array Message 
      {  // json object node 
       "pollid": "98", 
       "category": "Entertainment", 
       "question": "what", // string 
       "option1": "981.mov", 

Kết quả là một đối tượng json không json mảng

JSONArray jsonArray = new JSONArray(result); 

Nên

JSONObject jObj = new JSONObject(result); 
JSONObject response = jObj.getJSONObject("response"); 
//JSONObject jb = new JSONObject(response); 
JSONArray jr = response.getJSONArray("Message"); 
for(int i=0;i<jr.length();i++) 
{ 
JSONObject jb1 = jr.getJSONObject(i); 
String question = jb1.getString("question"); 
Log.i(".......",question); 
} 
0

Kết quả không phải là mảng, Thư là.

0
Value response of type java.lang.String cannot be converted to JSONArray 

Bạn đang cố gắng chuyển đổi một đối tượng thành mảng.

1

Hãy thử điều này:

Log.i("result", result); 
try { 
    if (result != null) { 
     JSONObject jObject = new JSONObject(result); 
     JSONArray jsonArray = jObject.getJSONObject("response").getJSONArray("Message"); 
     for (int i = 0; i < jsonArray.length(); i++) { 
      JSONObject objJson = jsonArray.getJSONObject(i); 

      TopTenGetterSetter obj = new TopTenGetterSetter(); 
      /* 
      * [{"job_id":"1","job_staff_id":"","job_name":"Account", 
      * "job_detail":"test\r\ntesds","job_start_date": 
      * "2013-11-08" 
      * ,"job_end_date":"2013-11-10","job_amount":"500" 
      * ,"job_progress":"","job_complete_status":"0"}] 
      */ 

      obj.setQ(objJson.getString("question")); 
      obj.setA(objJson.getString("option1")); 
      obj.setB(objJson.getString("option2")); 
      obj.setC(objJson.getString("option3")); 
      obj.setD(objJson.getString("option4")); 

      polls.add(obj); 
      // am = Customer.info.get(pos).getJamount(); 

      // Toast.makeText(getApplicationContext(), am + result, 
      // Toast.LENGTH_LONG).show(); 
     } 

    } 
} catch (JSONException e) { 
    e.printStackTrace(); 
    Toast.makeText(getApplicationContext(), "error", 
      Toast.LENGTH_SHORT).show(); 
} 

Như Mario và nfear nói, bạn đang cố gắng để đúc một JSONObject thành một JSONArray.

1

Chuỗi nội dung JSONObject như phần tử gốc thay vì JSONArray.to được Message JSONArray từ Chuỗi đầu tiên bạn sẽ nhận được response JSONObject sau đó nhận được Message JSONArray như:

JSONObject jsonobj = new JSONObject(result); 
// get response JSONObject 

JSONObject jsonobj_response = jsonobj.getJSONObject("response"); 

// get Message JSONArray from jsonobj_response 

JSONArray jsonArray = jsonobj_response.getJSONArray("Message"); 
    // your code here..... 
1

Hãy thử điều này,

try { 
    if (result != null) { 
     JSONArray jsonArray = new JSONObject(result).getJSONObject("response").getJSONArray("Message"); 
     for (int i = 0; i < jsonArray.length(); i++) { 
      JSONObject objJson = jsonArray.getJSONObject(i); 

      TopTenGetterSetter obj = new TopTenGetterSetter(); 
      /* 
      * [{"job_id":"1","job_staff_id":"","job_name":"Account", 
      * "job_detail":"test\r\ntesds","job_start_date": 
      * "2013-11-08" 
      * ,"job_end_date":"2013-11-10","job_amount":"500" 
      * ,"job_progress":"","job_complete_status":"0"}] 
      */ 

      obj.setQ(objJson.getString("question")); 
      obj.setA(objJson.getString("option1")); 
      obj.setB(objJson.getString("option2")); 
      obj.setC(objJson.getString("option3")); 
      obj.setD(objJson.getString("option4")); 

      polls.add(obj); 
      // am = Customer.info.get(pos).getJamount(); 

      // Toast.makeText(getApplicationContext(), am + result, 
      // Toast.LENGTH_LONG).show(); 
     } 

    } 
} 
0

tốt hơn để sử dụng thư viện GSON thay vì phân tích nó bằng tay. GSON bạn có thể tìm thấy nó trên goggling. và các ví dụ mẫu được đưa ra với điều đó.

1

Các JSON bạn đã đăng tải là có

// Key "response" , Value type JsonObject 

JSONObject jsonObject=jsonObjectOfRsponse.getJsonObject(key); 

//Key "Message" , Value type Json Array 

JSONArray jsonArray=jsonObject.getJsonArray(key); 

Sau khi nhận được jsonArray, sử dụng điều này trong một vòng lặp để phân tích Json theo kiểu giá trị bên trong nó.

Vì vậy, hãy kiểm tra xem bạn có đang phân tích cú pháp json theo loại giá trị mà nó đang giữ hay không.

Các vấn đề liên quan