使用Volley对JSON请求进行自定义对象绑定

时间:2016-02-15 11:44:07

标签: java android json android-volley

我正在学习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) {
            // ...
        }
    });

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

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

3 个答案:

答案 0 :(得分:0)

我想这会对你有帮助。

 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代替我的。{/ p>

完成

答案 1 :(得分:0)

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

答案 2 :(得分:0)

假设你的目标是获取一个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