Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android Volley删除方法,为什么会发送空参数大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_674_1@我使用 android volley库!我有一些不明白从服务器发送请求与json和deletE方法的问题.请求成功连接到服务器但服务器将收到的已发送参数为空.但标题请求工作正常!请帮我!
public void deletePoint(String id) throws JSONException {
    dialog.show();
    queue = Volley.newrequestQueue(getActivity(),new ExthttpClientStack(new SslhttpClient().gethttpClient()));
    String urlrequest = getUrl();
    JSONObject param = new JSONObject();
    param.put("id",id);
    JsonObjectrequest userrequest = new JsonObjectrequest(request.Method.deletE,urlrequest,param,deletePointrequestsuccessListener(),reqErrorListener()){
        @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>();
            }
            if (ProgressFragment.this.headers != null) {
                headers.keySet().removeAll(ProgressFragment.this.headers.keySet());
                headers.putAll(ProgressFragment.this.headers);
            }
            headers.put("Content-Type","application/json");
            return headers;
        }
    };

    userrequest.setRetryPolicy(new DefaultRetryPolicy(
            MY_SOCKET_TIMEOUT_MS,DefaultRetryPolicy.DEFAULT_MAX_RETRIES,DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

    dialog.show();
    queue.add(userrequest);
}

private Response.Listener<JSONObject> deletePointrequestsuccessListener() {
    return new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject responsE) {
            dialog.hide();
            Gson gson = new Gson();
            success resp = gson.fromJson(response.toString(),success.class);
            if(resp.issuccess()){
                Toast.makeText(getActivity(),getString(R.String.success),Toast.LENGTH_SHORT).show();
                try {
                    getGraphData();
                } catch (JSONException E) {
                    e.printStackTrace();
                }
            }
            dialog.hide();
        }
    };
}

解决方法

这是 issue已经解决

你可以重写HurlStack类

public class HurlStack implements httpStack {
             break;
         case Method.deletE:
             connection.setrequestMethod("deletE");
             addBodyIfExists(connection,request); // here call addBodyIfExists method
             break;
         case Method.POST:
             connection.setrequestMethod("POST");

例如,使用deletE方法的请求将很容易作为POST

@H_705_2@mQueue = Volley.newrequestQueue(context); Stringrequest postrequest = new Stringrequest(request.Method.deletE,httpUtilS.URL_MSG,new Response.Listener<String>() { @Override public void onResponse(String responsE) { if (mCallBACk!=null) { mCallBACk.success(responsE); } } },new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { if (mCallBACk!=null) { mCallBACk.fail(null); } } } ) { @Override protected Map<String,String> getParams() { return params; } }; mQueue.add(postrequest);

那只能解决android os 5.0设备的问题
android os 4.2.2设备上有新问题
它将引发以下异常

java.net.ProtocolException: deletE does not support wriTing

重写Volley.newrequestQueue(Context context,httpStack stack)方法可以解决这个问题

public static requestQueue newrequestQueue(Context context,httpStack stack) {
    .
    .
    .


    if (stack == null) {
        if (Build.VERSION.SDK_INT >= 9) {
            stack = new OkhttpStack();
        } else {
            // Prior to Gingerbread,httpUrlConnection was unreliable.
            // See: http://android-developers.blogspot.com/2011/09/androids-http-clients.html
            stack = new httpClientStack(androidhttpclient.newInstance(userAgent));
        }
    }

    .
    .
    .


    return queue;
}

OkhttpStack.java(okhttp-1.6.0.jar)

public class OkhttpStack extends HurlStack {
  private final OkhttpClient client;

  public OkhttpStack() {
    this(new OkhttpClient());
  }

  public OkhttpStack(OkhttpClient client) {
    if (client == null) {
      throw new NullPointerException("Client must not be null.");
    }
    this.CLIENt = client;
  }

  @Override protected httpURLConnection createConnection(URL url) throws IOException {
    return client.open(url);
  }   
}

它对我有用,希望能为你效劳

大佬总结

以上是大佬教程为你收集整理的android Volley删除方法,为什么会发送空参数全部内容,希望文章能够帮你解决android Volley删除方法,为什么会发送空参数所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。