我已经开始使用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)
答案 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的数据填充该类,使其变得有用。