Volley JsonObjectRequest 请求发送失败

文章标签: android,android-volley
2014-12-28 13:32:23     人阅读    

我现在使用 android Volley 发送json请求,见下面的代码,出现了问题,我检测服务器一直报null,我怀疑 getParams()  方法不能正常工作,如何解决这个问题?

发送代码如下

RequestQueue queue = MyVolley.getRequestQueue();
        JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.POST,SPHERE_URL,null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        System.out.println(response);
                        hideProgressDialog();
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                      hideProgressDialog();
                    }
                }) {
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> params = new HashMap<String, String>();
                params.put("id","1");
                params.put("name", "myname");
                return params;
            };
        };
        queue.add(jsObjRequest);


 

处理方法

用下面这个帮助类

import java.io.UnsupportedEncodingException;
    import java.util.Map;
    import org.json.JSONException;
    import org.json.JSONObject;
    import com.android.volley.NetworkResponse;
    import com.android.volley.ParseError;
    import com.android.volley.Request;
    import com.android.volley.Response;
    import com.android.volley.Response.ErrorListener;
    import com.android.volley.Response.Listener;
    import com.android.volley.toolbox.HttpHeaderParser;

    public class CustomRequest extends Request<JSONObject> {

    private Listener<JSONObject> listener;
    private Map<String, String> params;

    public CustomRequest(String url, Map<String, String> params,
            Listener<JSONObject> reponseListener, ErrorListener errorListener) {
        super(Method.GET, url, errorListener);
        this.listener = reponseListener;
        this.params = params;
    }

    public CustomRequest(int method, String url, Map<String, String> params,
            Listener<JSONObject> reponseListener, ErrorListener errorListener) {
        super(method, url, errorListener);
        this.listener = reponseListener;
        this.params = params;
    }

    protected Map<String, String> getParams()
            throws com.android.volley.AuthFailureError {
        return params;
    };

    @Override
    protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
        try {
            String jsonString = new String(response.data,
                    HttpHeaderParser.parseCharset(response.headers));
            return Response.success(new JSONObject(jsonString),
                    HttpHeaderParser.parseCacheHeaders(response));
        } catch (UnsupportedEncodingException e) {
            return Response.error(new ParseError(e));
        } catch (JSONException je) {
            return Response.error(new ParseError(je));
        }
    }

    @Override
    protected void deliverResponse(JSONObject response) {
        // TODO Auto-generated method stub
        listener.onResponse(response);
    }
    }


在你的 activity/fragment 中这么写

RequestQueue requestQueue = Volley.newRequestQueue(getActivity());
        CustomRequest jsObjRequest = new CustomRequest(Method.POST
 
                 url,params,
                this.createRequestSuccessListener(),
                this.createRequestErrorListener());

        requestQueue.add(jsObjRequest);


原文地址:http://www.itmmd.com/201412/399.html
该文章由 萌萌的IT人 整理发布,转载须标明出处。

android开发,屏幕适配为不同的设置设置不同过的字体和图片   上一篇
下一篇  andorid批量处理 位图 报错 OutOfMemoryError: bitmap size exceeds VM budget
精彩回复
我要追加问题,请求站长解决!
姓名:       

《程序员app》专门为程序员量身定做!