Android排球库不接受来自getParam()的url中的参数

时间:2015-03-10 09:30:30

标签: android string web-services request android-volley

Android排球库不接受来自getParam()方法的参数。如果它在查询字符串中给出,那么它可以工作。我尝试了GET和POST它不起作用。但是我想给POST参数提供参数。请检查我在下面发布的代码。

RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
		String url = AppConstants.WEBSERVICE_URL
				+ AppConstants.WEBSERVICE_URL_POST_COMMENT;

		StringRequest getRequest = new StringRequest(Request.Method.GET, url,
				new Response.Listener<String>() {

					@Override
					public void onResponse(String response) {
						// response
						Log.d("Response_postComment", response);
	
						Intent intent = new Intent(getApplicationContext(),
								ReviewActivity.class);
						intent.putExtra("serviceId", servicePosition);
						startActivity(intent);
					}
				}, new Response.ErrorListener() {
					@Override
					public void onErrorResponse(VolleyError error) {
						// error
						Log.d("Error.Response", error.toString());
					}
				}) {
			 
			
			@Override
             public Map<String, String> getHeaders() throws AuthFailureError {
                 Map<String, String> pars = new HashMap<String, String>();
                 pars.put("Content-Type", "application/x-www-form-urlencoded");
                 return pars;
             }
			
			@Override
			protected Map<String, String> getParams() throws AuthFailureError{
				Map<String, String> params = new HashMap<String, String>();
				params.put("rating", ratingBar.getRating() + "");
				params.put("com_content", comments.getText() + "");
				params.put("user_id", AppConstants.APP_LOGIN_USER_ID);
				params.put("comm_post_ID", AppConstants.arrListServiceDetail
						.get(servicePosition).getId() + "");

				return params;
			}
		};

		getRequest.setRetryPolicy(new DefaultRetryPolicy(500000,
				DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
				DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
		queue.add(getRequest);

2 个答案:

答案 0 :(得分:1)

getParam()方法无法使用volley.its上的GET请求与POST方法一起正常工作。您必须使用参数设置完整的URL。

答案 1 :(得分:-1)

我遇到了与您现在面临的问题相同的问题,但是通过将核心类Request作为此请求的超类来提出自定义请求的解决方案。在这里我在构造函数中传递params,然后将其返回到getParams()重写方法,如下所示:

public class RequestJson extends Request<JSONObject> {

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

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

public RequestJson(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) {
    AppController.getInstance().checkSessionCookie(response.headers);
    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);
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
    Map<String, String> headers = super.getHeaders();

    if (headers == null
            || headers.equals(Collections.emptyMap())) {
        headers = new HashMap<String, String>();
    }

    AppController.getInstance().addSessionCookie(headers);

    return headers;
}
}

希望这能解决您的问题。