json对象在浏览器中工作但在Android App

时间:2015-05-08 19:25:16

标签: android json wordpress

我已经开始使用JSON来更新我的应用中的列表。我以前做过这个没有太多问题,并且很好地理解了JSON对象。当我在浏览器中连接http://chuckfranklinlaw.com/wp-json/posts/511时,我得到JSON对象,因为我希望看到它,但当我尝试通过我的Android应用程序连接到JSON时,我收到一条json_missing_callback_param错误消息。请注意,这是我的早期代码,UI线程上的网络强制仅用于测试目的。

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:Value [{“code”:“json_missing_callback_param”,“message”:“缺少参数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.chuckfranklinlaw 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:at android.app.ActivityThread.access $ 900(ActivityThread.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 Method)   05-08 13:06:49.378 10989-10989 / com.chuckfranklin.chuckfranklinlaw W / System.err:at java.lang.reflect.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)

1 个答案:

答案 0 :(得分:0)

首先,浏览器和Android应用程序是两个非常不同的东西。你可以在浏览器中做什么,你不能在Android应用程序中做。

其次, 来自link的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的数据填充该类,使其变得有用。