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

Android volley library is not accepting parameters in url from getParam()

Android volley 库不接受来自 getParam() 的参数 method.If 它在查询字符串中给出然后它 works.I 尝试了 GET 和 POST 它没有'行得通。但我想给参数 POST Method.please 检查我在下面发布的代码。

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);

getParam() 方法不适用于 volley.its 上的 GET 请求,可与 POST 一起正常工作 methods.you 必须使用参数设置完整的 URL。

我遇到了与您现在面临的问题相同的问题,但提出了通过将核心 class 请求作为此请求的超级 class 来发出自定义请求的解决方案。在这里,我在构造函数中传递参数,然后将其返回给 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;
}
}

希望这能解决您的问题。