2015-05-08 67 views
0

我已經開始使用JSON更新我的應用程序中的列表。我以前做過這個沒有太多問題,並且很好地理解了JSON對象。當我在瀏覽器中連接到http://chuckfranklinlaw.com/wp-json/posts/511時,我得到JSON對象,因爲我期望看到它,但是當我嘗試通過我的Android應用程序連接到JSON時,出現json_missing_callback_param錯誤消息。請注意,這是我的早期代碼,UI線程上的網絡強制僅用於測試目的。json對象在瀏覽器中工作,但不在Android應用程序

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_events); //Was activity_postList 
    //This was working before atempted modifications 
    /*HTTPDownloadTask tester = new HTTPDownloadTask(); 
    String params = "http://www.chuckfranklinlaw.com/events/feed/"; 
    tester.execute(params); 

    this.generateDummyData();*/ 

    JSONArray json = null; 
    String str = ""; 
    HttpResponse response; 
    HttpClient myClient = new DefaultHttpClient(); 
    HttpPost myConnection = new HttpPost("http://chuckfranklinlaw.com/wp-json/posts/511"); 

    TextView testText = (TextView) findViewById(R.id.testView); 

    if (android.os.Build.VERSION.SDK_INT > 9) { 
     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 
    } 

    try { 
     response = myClient.execute(myConnection); 
     str = EntityUtils.toString(response.getEntity(), "UTF-8"); 
     testText.setText(str); 
    } catch (ClientProtocolException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    str = str.replaceAll("\\<.*?>", ""); 

    try { 
     json = new JSONArray(str); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } catch (NullPointerException e) { 
     e.printStackTrace(); 
    } 
} 

我正在使用WP-JSON插件並遵循有關如何格式化URL的指導原則。它也適用於瀏覽器。

之前被創建的任何對象,我有我的日誌打印出字符串,我是從URL接收:

{"code":"json_missing_callback_param","message":"Missing parameter data"} 

這裏是日誌,當我嘗試使用一個JSONObject,由於某種原因,它是通過我這個錯誤代碼而不是我的對象,這就是爲什麼我已經將它初始化爲一個數組。

05-08 13:06:49.378 10989-10989/com.chuckfranklin.chuckfranklinlaw W/System.err的:org.json.JSONException:值[{ 「代碼」: 「json_missing_callback_param」, 「消息」: 「Missing parameter data」}]類型org.json.JSONArray無法轉換爲JSONObject 05-08 13:06:49.378 10989-10989/com.chuckfranklin.chuckfranklinlaw W/System.err:at org.json.JSON。 typeMismatch(JSON.java:111) 05-08 13:06:49.378 10989-10989/com.chuckfranklin.chuckfranklinlaw W/System.err:at org.json.JSONObject。(JSONObject.java:160) 05-08 13:06:49.378 10989-10989/com.chuckfranklin.chuckfranklinlaw W/System.err:at org.json.JSONObject。(JSONObject.java:173) 05-08 13:06:49.378 10989-10989/com.chuckfranklin .chuckfranklinl aw W/System.err:at com.chuckfranklin.chuckfranklinlaw.Events.onCreate(Events.java:99) 05-08 13:06:49.378 10989-10989/com.chuckfranklin.chuckfranklinlaw W/System.err:at android .app.Activity.performCreate(Activity.java:6288) 05-08 13:06:49.378 10989-10989/com.chuckfranklin.chuckfranklinlaw W/System.err:at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java: 1119) 05-08 13:06:49.378 10989-10989/com.chuckfranklin.chuckfranklinlaw W/System.err:at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646) 05-08 13:06:49.378 10989-10989/com.chuckfranklin.chuckfranklinlaw W/System.err:at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2758) 05-08 13:06:49.378 10989-10989/com.chuckfranklin.chuckfranklinlaw W/System.err:在android.app.ActivityThread.access $ 900(Activity Thread.java:177) 05-08 13:06:49.378 10989-10989/com.chuckfranklin.chuckfranklinlaw W/System.err:at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1448) 05- 08 13:06:49.378 10989-10989/com.chuckfranklin.chuckfranklinlaw W/System.err:at android.os.Handler.dispatchMessage(Handler.java:102) 05-08 13:06:49.378 10989-10989/com .chuckfranklin.chuckfranklinlaw W/System.err:at android.os.Looper.loop(Looper.java:145) 05-08 13:06:49.378 10989-10989/com.chuckfranklin.chuckfranklinlaw W/System.err:at android.app.ActivityThread.main(ActivityThread.java:5942) 05-08 13:06:49.378 10989-10989/com.chuckfranklin.chuckfranklinlaw W/System.err:at java.lang.reflect.Method.invoke(Native方法) 05-08 13:06:49.378 10989-10989/com.chuckfranklin.chuckfranklinlaw W/System.err:at java.lang.refl ect.Method.invoke(Method.java:372) 05-08 13:06:49.378 10989-10989/com.chuckfranklin.chuckfranklinlaw W/System.err:at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1399) 05-08 13:06:49.378 10989-10989/com.chuckfranklin.chuckfranklinlaw W/System.err:at com.android.internal.os.ZygoteInit.main(ZygoteInit。java:1194)

+0

您是否嘗試記錄您收到的內容? – njzk2

+0

您試圖將其轉換爲JSON不是有效的陣列。它需要從一個括號開始。嘗試將其轉換爲JsonObject。我現在只使用像GSon或Jackson這樣的POJO基於對象的轉換框架。創建你的json結構的POJO,它會爲你轉換它。 –

+0

@ njzk2是的,我收到{「code」:「json_missing_callback_param」,「message」:「缺少參數數據」} –

回答

0

首先,瀏覽器和Android應用程序是兩個完全不同的東西。你可以在瀏覽器中做什麼,你不能在android應用程序中完成。

其次, 該的JSON不是jsonArray。所以你不能這樣做json = new JSONArray(str)。該鏈接的json是一個非常複雜的json對象。

是JSON

{ 
    "ID": 511, 
    "title": "Test", 
    "status": "publish", 
    "type": "tribe_events", 
    "author": { 
     "ID": 1, 
     "username": "AllenJames", 
     "name": "Allen J.", 
     "first_name": "Allen", 
     "last_name": "James", 
     "nickname": "Allen J.", 
     "slug": "allenjames", 
     "URL": "", 
     "avatar": "http://0.gravatar.com/avatar/883cde1b0af767e5cd8eaeee192ed9fc?s=96", 
     "description": "", 
     "registered": "2015-03-01T19:47:22+00:00", 
     "meta": { 
       "links": 
        { 
         "self": "http://www.chuckfranklinlaw.com/wp-json/users/1", 
         "archives": "http://www.chuckfranklinlaw.com/wp-json/users/1/posts" 
        } 
       } 
     }, 
     "content": "<p>This is the description of test event.</p>\n", 

作爲一個開始的片段,JSONObject feed = new JSONObject(str);會工作。但是你必須創建一個合適的java類,然後用這個json的數據填充這個類,以使它接近有用。

+0

感謝您的指點,不幸的是,這對我的問題沒有多大幫助。我的問題是,我沒有像我期望的那樣從我的URL中接收該對象,而是將數組傳遞給我:[{「code」:「json_missing_callback_param」,「message」:「缺少參數數據」}]改變我的代碼陣列思維我錯過了括號,但我已經解決了這個問題,我仍然沒有正確的對象通過。 –

+0

取代 'HttpPost MyConnection的新= HttpPost( 「http://chuckfranklinlaw.com/wp-json/posts/511」);' 與 'HTTPGET MyConnection的新= HTTPGET(「HTTP:// chuckfranklinlaw。 COM/WP-JSON /職位/ 511" );' – pellucide

相關問題