java - stringrequest - http request android app




JSON-Typ stimmt nicht überein oder org.json.jsonexxeption (6)

Der Link ist http://iipacademy.in/askpoll/ten_feed.php

Ausnahme ist in onPostExecute () -Methode (4. Zeile):

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

Nachricht ist ein Array, also was sollte sein Code sein oder wie kann er gelöst werden?

Danke im Voraus . . .


Das Ergebnis ist kein Array, Nachricht ist.


Versuche dies,

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

    }
} 

Zeichenfolge Inhalt JSONObject als Root-Element anstelle von JSONArray.to Message JSONArray aus String zu erhalten, sollten Sie zuerst response JSONObject dann Message JSONArray wie erhalten:

 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.....

besser, die GSON-Bibliothek zu verwenden, anstatt sie manuell zu analysieren. GSON kannst du auf Gloggling finden. und Beispielbeispiele werden damit gegeben.


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

Sie versuchen, ein einzelnes Objekt in ein Array zu konvertieren.


Der JSON, den du gepostet hast, hat

// Key "response" , Value type JsonObject

 JSONObject jsonObject=jsonObjectOfRsponse.getJsonObject(key);

//Key "Message" , Value type Json Array

 JSONArray jsonArray=jsonObject.getJsonArray(key);

Nachdem Sie das jsonArray abgerufen haben, verwenden Sie dieses in einer Schleife, um das Json entsprechend dem darin enthaltenen Wert zu analysieren.

Überprüfen Sie also, ob Sie den JSON nach dem Wert sortieren, den er enthält.





android-asynctask