delete請求怎么傳參數,android volley 請求參數,android – Volley – 如何發送DELETE請求參數?

 2023-12-06 阅读 22 评论 0

摘要:同樣的問題在這里,但我找到了解決方案問題是在com.android.volley.toolbox.HttpClientStack.java中實現createHttpRequest方法,只有在請求方法為POST,PUT或PATCH時才會添加該主體./*** Creates the appropriate subclass of HttpUriRequest for passed in request.delete請求怎

同樣的問題在這里,但我找到了解決方案

問題是在com.android.volley.toolbox.HttpClientStack.java中實現createHttpRequest方法,只有在請求方法為POST,PUT或PATCH時才會添加該主體.

/**

* Creates the appropriate subclass of HttpUriRequest for passed in request.

delete請求怎么傳參數,*/

@SuppressWarnings("deprecation")

/* protected */ static HttpUriRequest createHttpRequest(Request> request,

Map additionalHeaders) throws AuthFailureError {

switch (request.getMethod()) {

attribute android:layout_width。case Method.DEPRECATED_GET_OR_POST: {

// This is the deprecated way that needs to be handled for backwards compatibility.

// If the request's post body is null, then the assumption is that the request is

// GET. Otherwise, it is assumed that the request is a POST.

byte[] postBody = request.getPostBody();

android最新請求框架、if (postBody != null) {

HttpPost postRequest = new HttpPost(request.getUrl());

postRequest.addHeader(HEADER_CONTENT_TYPE, request.getPostBodyContentType());

HttpEntity entity;

entity = new ByteArrayEntity(postBody);

android handle?postRequest.setEntity(entity);

return postRequest;

} else {

return new HttpGet(request.getUrl());

}

android網絡請求框架?}

case Method.GET:

return new HttpGet(request.getUrl());

case Method.DELETE:

return new HttpDelete(request.getUrl());

android再次請求。case Method.POST: {

HttpPost postRequest = new HttpPost(request.getUrl());

postRequest.addHeader(HEADER_CONTENT_TYPE, request.getBodyContentType());

setEntityIfNonEmptyBody(postRequest, request);

return postRequest;

}

case Method.PUT: {

HttpPut putRequest = new HttpPut(request.getUrl());

putRequest.addHeader(HEADER_CONTENT_TYPE, request.getBodyContentType());

setEntityIfNonEmptyBody(putRequest, request);

return putRequest;

}

case Method.HEAD:

return new HttpHead(request.getUrl());

case Method.OPTIONS:

return new HttpOptions(request.getUrl());

case Method.TRACE:

return new HttpTrace(request.getUrl());

case Method.PATCH: {

HttpPatch patchRequest = new HttpPatch(request.getUrl());

patchRequest.addHeader(HEADER_CONTENT_TYPE, request.getBodyContentType());

setEntityIfNonEmptyBody(patchRequest, request);

return patchRequest;

}

default:

throw new IllegalStateException("Unknown request method.");

}

}

所以你必須使用自己的HttpStack.java實現,或者你重寫HttpClientStack類.

首先你應該替換你的初始化RequestQueue

RequestQueue requestQueue = Volley.newRequestQueue(sContext);

String userAgent = "volley/0";

try {

String packageName = getContext().getPackageName();

PackageInfo info = getContext().getPackageManager().getPackageInfo(packageName, 0);

userAgent = packageName + "/" + info.versionCode;

} catch (PackageManager.NameNotFoundException e) {}

HttpStack httpStack = new OwnHttpClientStack(AndroidHttpClient.newInstance(userAgent));

RequestQueue requesQueue = Volley.newRequestQueue(sContext, httpStack);

并編寫您自己的HttpClientStack實現,您可以在createHttpRequest()方法中更改“Method.POST:”的大小寫.您還必須創建一個像“OwnHttpDelete”這樣的對象,作為HttpEntityEnclosingRequestBase的擴展,使用方法setEntityIfNonEmptyBody().

public class OwnHttpClientStack extends com.android.volley.toolbox.HttpClientStack {

private final static String HEADER_CONTENT_TYPE = "Content-Type";

public OwnHttpClientStack(HttpClient client) {

super(client);

}

@Override

public HttpResponse performRequest(Request> request, Map additionalHeaders)

throws IOException, AuthFailureError {

HttpUriRequest httpRequest = createHttpRequest(request, additionalHeaders);

addHeaders(httpRequest, additionalHeaders);

addHeaders(httpRequest, request.getHeaders());

onPrepareRequest(httpRequest);

HttpParams httpParams = httpRequest.getParams();

int timeoutMs = request.getTimeoutMs();

// TODO: Reevaluate this connection timeout based on more wide-scale

// data collection and possibly different for wifi vs. 3G.

HttpConnectionParams.setConnectionTimeout(httpParams, 5000);

HttpConnectionParams.setSoTimeout(httpParams, timeoutMs);

return mClient.execute(httpRequest);

}

private static void addHeaders(HttpUriRequest httpRequest, Map headers) {

for (String key : headers.keySet()) {

httpRequest.setHeader(key, headers.get(key));

}

}

static HttpUriRequest createHttpRequest(Request> request, Map additionalHeaders) throws AuthFailureError {

switch (request.getMethod()) {

case Request.Method.DEPRECATED_GET_OR_POST: {

byte[] postBody = request.getPostBody();

if (postBody != null) {

HttpPost postRequest = new HttpPost(request.getUrl());

postRequest.addHeader(HEADER_CONTENT_TYPE, request.getPostBodyContentType());

HttpEntity entity;

entity = new ByteArrayEntity(postBody);

postRequest.setEntity(entity);

return postRequest;

} else {

return new HttpGet(request.getUrl());

}

}

case Request.Method.GET:

return new HttpGet(request.getUrl());

case Request.Method.DELETE:

OwnHttpDelete deleteRequest = new OwnHttpDelete(request.getUrl());

deleteRequest.addHeader(HEADER_CONTENT_TYPE, request.getBodyContentType());

setEntityIfNonEmptyBody(deleteRequest, request);

return deleteRequest;

case Request.Method.POST: {

HttpPost postRequest = new HttpPost(request.getUrl());

postRequest.addHeader(HEADER_CONTENT_TYPE, request.getBodyContentType());

setEntityIfNonEmptyBody(postRequest, request);

return postRequest;

}

case Request.Method.PUT: {

HttpPut putRequest = new HttpPut(request.getUrl());

putRequest.addHeader(HEADER_CONTENT_TYPE, request.getBodyContentType());

setEntityIfNonEmptyBody(putRequest, request);

return putRequest;

}

case Request.Method.HEAD:

return new HttpHead(request.getUrl());

case Request.Method.OPTIONS:

return new HttpOptions(request.getUrl());

case Request.Method.TRACE:

return new HttpTrace(request.getUrl());

case Request.Method.PATCH: {

HttpPatch patchRequest = new HttpPatch(request.getUrl());

patchRequest.addHeader(HEADER_CONTENT_TYPE, request.getBodyContentType());

setEntityIfNonEmptyBody(patchRequest, request);

return patchRequest;

}

default:

throw new IllegalStateException("Unknown request method.");

}

}

private static void setEntityIfNonEmptyBody(HttpEntityEnclosingRequestBase httpRequest,

Request> request) throws AuthFailureError {

byte[] body = request.getBody();

if (body != null) {

HttpEntity entity = new ByteArrayEntity(body);

httpRequest.setEntity(entity);

}

}

private static class OwnHttpDelete extends HttpPost {

public static final String METHOD_NAME = "DELETE";

public OwnHttpDelete() {

super();

}

public OwnHttpDelete(URI uri) {

super(uri);

}

public OwnHttpDelete(String uri) {

super(uri);

}

public String getMethod() {

return METHOD_NAME;

}

}

}

我希望我的代碼能幫助某人.還可以向HEAD請求中添加參數.

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/188745.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息