Android JSON 使用 Volley 解析

Android JSON parsing using Volley

好的,所以我的 的答案建议用于 Volley 实施。我确实尝试了一些示例,阅读了一些文章,是的,我对 Volley 感到有点兴奋,它可以让我的应用程序生活更轻松。但是那里没有很多文档,对于像我这样的新手,我发现很难实现它。

这是我卡住的地方:

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    StringRequest movieReq = new StringRequest(url,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    Log.d(TAG, response.toString());
                    arrayList = new ArrayList<HashMap<String, String>>();
                    try {
                            jsonArray = jsonObject.getJSONArray("posts");
                            for (int z = 0; z < jsonArray.length(); z++) {
                                HashMap<String, String> map = new HashMap<String, String>();
                                JSONObject jsonObject1 = jsonArray.getJSONObject(z);
                                String url = jsonObject1.getString("url");
                                String title = jsonObject1.getString("title");
                                String content = jsonObject1.getString("content");
                                map.put(SHAREURL, url);
                                map.put(TITLE, title);
                                map.put(CONTENT, content);
                                JSONArray jsonArray1 = jsonObject1.getJSONArray("attachments");
                                for (int j = 0; j < jsonArray1.length(); j++) {
                                    JSONObject jsonObject2 = jsonArray1.getJSONObject(j);
                                    String urlImage = jsonObject2.getString("url");
                                    map.put(URL, urlImage);
                                    arrayList.add(map);

                                }
                            }

                    } catch (JSONException e) {
                        Log.e("Error", e.getMessage());
                        e.printStackTrace();
                    }
                    listView = (ListView) mActivity.findViewById(android.R.id.list);
                    adapter = new ListViewAdapter(mActivity, arrayList);
                    listView.setAdapter(adapter);
                    adapter.notifyDataSetChanged();
                }



  },new Response.ErrorListener(){
    @Override
    public void onErrorResponse(VolleyError error) {
        VolleyLog.d(TAG, "Error: " + error.getMessage());
  }
});
AppController.getInstance().addToRequestQueue(movieReq);

这是使用 JSON

格式化的页面
"posts" : [{
"title":"Fast and Furious",
"url":"example.com",
"content":"example",
"attachments":[{
"url":"example.jpg" }]}]

这就是我使用 Gson 的方式。 首要任务是添加库。我当然希望您使用的是 Android Studio,这样您就可以将其添加到您的 build.gradle

compile 'com.google.code.gson:gson:2.3.1'


然后我们将响应模仿为相应的普通旧 java object (POJO)。基本上我们定义了几个 类 ,它们的成员反映了 json 文本中的类型和名称,就像这样。 (您需要将其与示例的响应文本相匹配)

class Attachment {
   private String url;  

   public String getUrl(){
      return url;
   }       

   public String setUrl(String url){
      this.url = url;
   }
}

class Post {
   private String title; //make sure each variable name is the same 
                         //as the field in json text
   private String url;
   private String content;
   private ArrayList<Attachment> attachments;

   // add getters and setters as needed. Again this can be accomplished easily
   // in Android Studio
}

class Wrap {
  private ArrayList<Post> posts;
}

现在我们回到您的Volley.onResponse,我们只是这样做

  @Override
  public void onResponse(String response) {
     Wrap wrap = new Gson().fromJson(response, Wrap.class);        
  }

好了,只有一行,跳过了所有痛苦的迭代。 现在您有了这个 Wrap object,您可以轻松地获取或设置它的任何内容。说拿第一个的标题post就做

String titleOfFirstPost = wrap.getPosts().get(0).getTitle();

感谢@inmyth 为我的问题构建了一个简单的解决方案。我在 onResponse 方法中得到了这段代码:

 public void onResponse(String response) {
                    Wrap wrap = new Gson().fromJson(response, Wrap.class);

                    for(Post post : wrap.getPosts()){
                        adapter.add(post);
                    }

您可以在 here

上查看完整代码