【问题标题】:Custom object binding for JSON requests using Volley使用 Volley 的 JSON 请求的自定义对象绑定
【发布时间】:2016-05-26 07:29:59
【问题描述】:

我正在研究 Volley 库,特别是我正在处理 JSONObject 请求。在几个教程中,我可以找到这样的示例:

JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.GET,
    url, null,
    new Response.Listener<JSONObject>() {

        @Override
        public void onResponse(JSONObject response) {
            // ...
        }
    }
    , new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {
            // ...
        }
    });

但现在我想知道是否有办法将自定义类绑定到请求对象或结果对象。

我的意思是:我想将键值结果映射到我的应用程序域中的某个强类型自定义对象。这是可能的还是我应该自己实现这个功能?

【问题讨论】:

  • 您可以使用GsonJSONObject 解组到您的自定义对象中。但出于好奇,为什么不直接Retrofit
  • @W.K.S 我是 Android 新手,我正在评估一些库。我不知道改造库。谢谢你的建议!
  • 哦,如果您是 Android 新手,请选择 Retrofit,永不回头。它确实节省了时间和代码 + 与 Volley 不同,它有更好的文档。

标签: java android json android-volley


【解决方案1】:

我想这会对你有所帮助。

 JsonObjectRequest jsObjRequest = new JsonObjectRequest(Method.POST,url,your_json_object,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                       // On Success
                     }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                       // On Failure                           
                    }
                });
 MyApplication.getInstance().addToRequestQueue(jsObjRequest, tag);

传递你的your_json_object 而不是我的。

完成

【讨论】:

    【解决方案2】:

    您可以像这样使用 Gson 库: https://gist.github.com/ficusk/5474673

    【讨论】:

      【解决方案3】:

      假设您的目标是获取一个 Name 对象,其中 Name 定义为

      public class Name{
          private String firstName;
          private String middleName;
          private String lastName;
      
          //constructor, getter, setter
      }
      

      那么您可以使用 Gson 将 JSONObject 转换为 Name

      JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.GET,
          url, null,
          new Response.Listener<JSONObject>() {
      
              @Override
              public void onResponse(JSONObject response) {
                  Gson gson = new Gson();
                  Name name = gson.fromJson(response.toString(),Name.class);
      
                  //use Name.
              }
          }
          , new Response.ErrorListener() {
      
              @Override
              public void onErrorResponse(VolleyError error) {
                  // ...
              }
          });
      

      @Lissf 的回答是避免样板文件的好方法。

      但是,我建议您查看Retrofit,它可以将其减少到一行:

      @GET ("/name")
      getName(Callback<Name> nameCallback);
      

      您可能还想查看RxAndroid

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-12
        • 2017-01-21
        • 2013-07-30
        • 2015-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多