java - 通过 webservice android 读取 JSON

标签 java android json webservice-client arrays

我正在尝试构建一个解析来自 api 的 JSON 响应的 android 应用程序,我在下面包含了 API 响应:

{
  "success": 1,
  "message": "Post Available!",
  "posts": [
    {
      "post_id": "1",
      "username": "foo",
      "title": "my tile",
      "message": "this is my message"
    },
    {
      "post_id": "2",
      "username": "user2",
      "title": "titre 2",
      "message": "this is my message 2"
    },
    {
      "post_id": "3",
      "username": "123",
      "title": "12",
      "message": "111"
    },
  ]
}

这是读取此 JSON 的代码部分:

// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("receiver", strSender));
JSONObject json = jsonParser.makeHttpRequest(
        LOGIN_URL, "POST", params);
success = json.getInt(TAG_SUCCESS);

Log.d("ok", "ok");

if (success == 1){

    messagesArray = (JSONArray)json.getJSONArray(TAG_POSTS);
    for (int i= 0;i <messagesArray.length();i++){
        Log.d("iteration", "iteration" + i);
        JSONObject messageJson = messagesArray.getJSONObject(i);
        Log.d("post_id","post_id: "+i+ " "+ messageJson.getString(TAG_POSTS_ID) );
        Log.d("username","username: " +i+" " + messageJson.getString(TAG_POSTS_USERNAME));
        Log.d("title", "title: " +i+ " " + messageJson.getString(TAG_POSTS_ID_TITLE));
        Log.d("message","message: "+i+" "+ messageJson.getString(TAG_POSTS_ID_MESSAGE));
    }

}else{
    Log.d("failed", "!!!!!!!!!!!!!!!!!!!!!!!!");
}

一切看起来都很好,但是当我尝试运行我的应用程序并获取数据时,应用程序崩溃并退出并出现错误 No value for posts 这是来自 logcat 的日志:

09-27 23:15:37.119: W/System.err(489): org.json.JSONException: No value for posts 
09-27 23:15:37.119: W/System.err(489): at org.json.JSONObject.get(JSONObject.java:354) 
09-27 23:15:37.128: W/System.err(489): at org.json.JSONObject.getJSONArray(JSONObject.java:544) 
09-27 23:15:37.128: W/System.err(489): at com.example.mysql.ReadMessages.onCreate(ReadMessages.java:73) 
09-27 23:15:37.128: W/System.err(489): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
09-27 23:15:37.128: W/System.err(489): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 
09-27 23:15:37.128: W/System.err(489): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
09-27 23:15:37.128: W/System.err(489): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
09-27 23:15:37.128: W/System.err(489): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
09-27 23:15:37.138: W/System.err(489): at android.os.Handler.dispatchMessage(Handler.java:99) 
09-27 23:15:37.138: W/System.err(489): at android.os.Looper.loop(Looper.java:123) 
09-27 23:15:37.138: W/System.err(489): at android.app.ActivityThread.main(ActivityThread.java:3683) 
09-27 23:15:37.138: W/System.err(489): at java.lang.reflect.Method.invokeNative(Native Method) 
09-27 23:15:37.138: W/System.err(489): at java.lang.reflect.Method.invoke(Method.java:507) 
09-27 23:15:37.138: W/System.err(489): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
09-27 23:15:37.138: W/System.err(489): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
09-27 23:15:37.138: W/System.err(489): at dalvik.system.NativeStart.main(Native Method)

最佳答案

我这样试过你的代码,

    private void jsonTest() {
    try {
        String jsonString = "{\"success\":1,\"message\":\"Post Available!\",\"posts\":[{\"post_id\":\"1\",\"username\":\"hasni\",\"title\":\"titre\",\"message\":\"this is my message\"},{\"post_id\":\"2\",\"username\":\"user2\",\"title\":\"titre 2\",\"message\":\"this is my message 2\"},{\"post_id\":\"3\",\"username\":\"123\",\"title\":\"12\",\"message\":\"111\"},{\"post_id\":\"4\",\"username\":\"1212\",\"title\":\"1212\",\"message\":\"1212\"},{\"post_id\":\"5\",\"username\":\"1212\",\"title\":\"bonjour\",\"message\":\"voila ce message qui vient d'une session \"},{\"post_id\":\"6\",\"username\":\"121212\",\"title\":\"titre\",\"message\":\"message\"}]}";

        Log.i(TAG, "jsonString = " + jsonString);
        JSONObject json = new JSONObject(jsonString);
        int success = json.getInt("success");

        Log.d("ok", "ok");

        if (success == 1) {

            JSONArray messagesArray = (JSONArray) json
                    .getJSONArray("posts");
            for (int i = 0; i < messagesArray.length(); i++) {
                Log.d("iteration", "iteration" + i);
                JSONObject messageJson = messagesArray.getJSONObject(i);
                Log.d("post_id",
                        "post_id: " + i + " "
                                + messageJson.getString("post_id"));
                Log.d("username",
                        "username: " + i + " "
                                + messageJson.getString("username"));
                Log.d("title",
                        "title: " + i + " "
                                + messageJson.getString("title"));
                Log.d("message",
                        "message: " + i + " "
                                + messageJson.getString("message"));
            }

        } else {
            Log.d("failed", "!!!!!!!!!!!!!!!!!!!!!!!!");
        }
    } catch (Exception e) {
        // TODO: handle exception
        e.printStackTrace();
    }
}

并且工作正常,可能是您定义的 TAG 有问题。

关于java - 通过 webservice android 读取 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26070023/

相关文章:

java - 使用intellij创建twitterheron项目的正确方法

java - 如何像使用接口(interface)一样使用枚举?

java - 如何将我自己的代码插入 Netbeans Gui Builder?

java - 如何使用监听器捕获所有运动事件

Android 应用仅为一个 Activity 启用 NFC

android - URL 提取完成时禁用进度条 : A standard scenario

android - Galaxy S10、S10+ 全屏模式

json - 如何从 Linkedin API 获取公司 Logo ?

java - 无法使用 API v2 Foreman 1.7.1 创建主机

python - 将 json 解析为 pandas 数据帧