【发布时间】: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。