【问题标题】:json object working in Browsers but not in Android Appjson 对象在浏览器中工作但在 Android 应用程序中不工作
【发布时间】:2015-05-08 19:25:16
【问题描述】:

我已经开始使用 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 类型的 data"}] 无法转换为 JSONObject 05-08 13:06:49.378 10989-10989/com.chuckfranklin.chuckfranklinlaw W/System.err:在 org.json.JSON.typeMismatch(JSON.java:111) 05-08 13:06:49.378 10989-10989/com.chuckfranklin.chuckfranklinlaw W/System.err:在 org.json.JSONObject.(JSONObject.java:160) 05-08 13:06:49.378 10989-10989/com.chuckfranklin.chuckfranklinlaw W/System.err:在 org.json.JSONObject.(JSONObject.java:173) 05-08 13:06:49.378 10989-10989/com.chuckfranklin.chuckfranklinlaw W/System.err﹕在 com.chuckfranklin.chuckfranklinlaw.Events.onCreate(Events.java:99) 05-08 13:06:49.378 10989-10989/com.chuckfranklin.chuckfranklinlaw W/System.err:在 android.app.Activity.performCreate(Activity.java:6288) 05-08 13:06:49.378 10989-10989/com.chuckfranklin.chuckfranklinlaw W/System.err:在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119) 05-08 13:06:49.378 10989-10989/com.chuckfranklin.chuckfranklinlaw W/System.err:在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646) 05-08 13:06:49.378 10989-10989/com.chuckfranklin.chuckfranklinlaw W/System.err:在 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(ActivityThread.java:177) 05-08 13:06:49.378 10989-10989/com.chuckfranklin.chuckfranklinlaw W/System.err:在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1448) 05-08 13:06:49.378 10989-10989/com.chuckfranklin.chuckfranklinlaw W/System.err:在 android.os.Handler.dispatchMessage(Handler.java:102) 05-08 13:06:49.378 10989-10989/com.chuckfranklin.chuckfranklinlaw W/System.err:在 android.os.Looper.loop(Looper.java:145) 05-08 13:06:49.378 10989-10989/com.chuckfranklin.chuckfranklinlaw W/System.err:在 android.app.ActivityThread.main(ActivityThread.java:5942) 05-08 13:06:49.378 10989-10989/com.chuckfranklin.chuckfranklinlaw W/System.err﹕在 java.lang.reflect.Method.invoke(Native Method) 05-08 13:06:49.378 10989-10989/com.chuckfranklin.chuckfranklinlaw W/System.err:在 java.lang.reflect.Method.invoke(Method.java:372) 05-08 13:06:49.378 10989-10989/com.chuckfranklin.chuckfranklinlaw W/System.err﹕在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) 05-08 13:06:49.378 10989-10989/com.chuckfranklin.chuckfranklinlaw W/System.err﹕在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)

【问题讨论】:

  • 您是否尝试记录您收到的内容?
  • 您的 JSON 不是有效的数组,因为您尝试将其转换为。它需要以括号 [.尝试将其转换为 JsonObject。我现在只使用 GSon 或 Jackson 等基于 POJO 对象的转换框架。创建您的 json 结构的 POJO,它会为您转换它。
  • @njzk2 是的,我收到 {"code":"json_missing_callback_param","message":"Missing parameter data"}
  • @GaryBak 这是我的疏忽,但我从服务器收到的字符串不是它应该是的对象。在日志上打印出来给了我上面的对象。
  • 不敢相信我没有看到:当您尝试执行 GET 时,您正在使用 HttpPost。

标签: android json wordpress


【解决方案1】:

首先,浏览器和 Android 应用程序是两个截然不同的东西。你可以在浏览器中做的事情,你不能在安卓应用中做。

其次, 来自link 的 json 不是 jsonArray。所以你不能做json = new JSONArray(str)。该链接中的 json 是一个非常复杂的 json 对象。

那个 json 的 sn-p

{
  "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 的数据填充该类,以使其接近有用。

【讨论】:

  • 感谢您的指点,不幸的是它对我的问题没有多大帮助。我的问题是我没有像预期的那样从我的 URL 接收该对象,而是将数组传递给我: [{"code":"json_missing_callback_param","message":"Missing parameter data"}] 我最初有将我的代码更改为数组,认为我错过了括号,但我已经解决了这个问题,我仍然没有正确的对象通过。
  • HttpGet myConnection = new HttpGet("http://chuckfranklinlaw.com/wp-json/posts/511");替换HttpPost myConnection = new HttpPost("http://chuckfranklinlaw.com/wp-json/posts/511");
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-15
  • 2021-07-14
  • 2014-03-27
  • 2021-05-10
  • 2021-12-04
相关资源
最近更新 更多