在我更新sdk并在我的项目中使用API23后,我发现有一些错误,因为找不到相关的包,然后我找到它,知道API23已经删除了apache http包。
那么现在什么是旧的apache http包的替代品,换句话说,如何在Android API23中处理volley以避免错误。
我去过Volley的谷歌源搜索新版本,但似乎没有解决方案。
下面是我为volley https://gist.github.com/hussainderry/0b31063b0c9dcb1cbaec编写的一个多部分请求。它使用OkHttp,因此您不必再担心Apache问题。
import com.android.volley.AuthFailureError;
import com.android.volley.DefaultRetryPolicy;
import com.android.volley.NetworkResponse;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.RetryPolicy;
import com.android.volley.VolleyLog;
import com.android.volley.toolbox.HttpHeaderParser;
import com.squareup.okhttp.Headers;
import com.squareup.okhttp.MediaType;
import com.squareup.okhttp.MultipartBuilder;
import com.squareup.okhttp.RequestBody;
import android.util.Log;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;
import okio.Buffer;
/**
* Multipart request for Google's Volley using Square's OkHttp.
* @author Hussain Al-Derry
* @version 1.0
* */
public class VolleyMultipartRequest extends Request<String> {
/* Used for debugging */
private static final String TAG = VolleyMultipartRequest.class.getSimpleName();
/* MediaTypes */
public static final MediaType MEDIA_TYPE_JPEG = MediaType.parse("image/jpeg");
public static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png");
public static final MediaType MEDIA_TYPE_TEXT_PLAIN = MediaType.parse("text/plain");
private MultipartBuilder mBuilder = new MultipartBuilder();
private final Response.Listener<String> mListener;
private RequestBody mRequestBody;
public VolleyMultipartRequest(String url,
Response.ErrorListener errorListener,
Response.Listener<String> listener) {
super(Method.POST, url, errorListener);
mListener = listener;
mBuilder.type(MultipartBuilder.FORM);
}
/**
* Adds a collection of string values to the request.
* @param mParams {@link HashMap} collection of values to be added to the request.
* */
public void addStringParams(HashMap<String, String> mParams){
for (Map.Entry<String, String> entry : mParams.entrySet()) {
mBuilder.addPart(
Headers.of("Content-Disposition", "form-data; name=\"" + entry.getKey() + "\""),
RequestBody.create(MEDIA_TYPE_TEXT_PLAIN, entry.getValue()));
}
}
/**
* Adds a single value to the request.
* @param key String - the field name.
* @param value String - the field's value.
* */
public void addStringParam(String key, String value) {
mBuilder.addPart(
Headers.of("Content-Disposition", "form-data; name=\"" + key + "\""),
RequestBody.create(MEDIA_TYPE_TEXT_PLAIN, value));
}
/**
* Adds a binary attachment to the request.
* @param content_type {@link MediaType} - the type of the attachment.
* @param key String - the attachment field name.
* @param value {@link File} - the file to be attached.
* */
public void addAttachment(MediaType content_type, String key, File value){
mBuilder.addPart(
Headers.of("Content-Disposition", "form-data; name=\"" + key + "\""),
RequestBody.create(content_type, value));
}
/**
* Builds the request.
* Must be called before adding the request to the Volley request queue.
* */
public void buildRequest(){
mRequestBody = mBuilder.build();
}
@Override
public String getBodyContentType() {
return mRequestBody.contentType().toString();
}
@Override
public byte[] getBody() throws AuthFailureError {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try
{
Buffer buffer = new Buffer();
mRequestBody.writeTo(buffer);
buffer.copyTo(bos);
} catch (IOException e) {
Log.e(TAG, e.toString());
VolleyLog.e("IOException writing to ByteArrayOutputStream");
}
return bos.toByteArray();
}
@Override
protected Response<String> parseNetworkResponse(NetworkResponse response) {
String parsed;
try {
parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
} catch (UnsupportedEncodingException e) {
parsed = new String(response.data);
}
return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response));
}
@Override
public Request<?> setRetryPolicy(RetryPolicy retryPolicy) {
return super.setRetryPolicy(retryPolicy);
}
@Override
protected void deliverResponse(String response) {
if (mListener != null) {
mListener.onResponse(response);
}
}
}
希望有用。
问题内容: 我要删除具有多对多关系的一个站点上的表中的一行。我还想删除该关系另一侧的所有相关行。 例如,假设我有以下表格,并且想从中删除一行。我也想从中删除所有相关的行,当然,也删除其中不再需要的任何行。 我知道如何在查询中连接以上表格。但是我看不到如何删除整个关系中的数据。 注意:关系的两端都实现级联删除。因此,例如,从中删除行将删除中的任何相关行。但是显然,这不会传播到表中。 问题答案: 我认
我正在编写一个服务器,用于处理来自javascript注释包(annotatorjs.org)的超文本传输协议请求。javascript向服务器发送一个HTTP DELETE请求,其中包括路径中对象的id,并在JSON对象中发送请求正文中的注释。 我已经尝试用一个JavaWeb服务对象和一个普通的servlet来实现删除请求。在这两种情况下,当我在没有正文的情况下提出请求时,它都是有效的,但当我添
很抱歉,如果这是显而易见的,但我们已经为这件事挠头好几天了。 考虑三个实体,Parent、Child和x: X与Child有@ManyToOne关系,可选=true。 当我们删除一个父级时,理想情况是这样的。我们希望delete级联并移除与已删除父行相对应的所有子行。目前还没问题。但我们也希望引用任何已删除子项的任何X将子项关系清空。我们不想删除任何X,我们只想将关系空掉。这与它是一种“可选的”关
如题 比如我写文章的时候插入了两张图片A和B 编辑的时候,删除了图片B 后端如何知道删除的图片?从而将图片数据从数据库删除和图片文件从ftp删除? 通过前端提交的文本中图片的连接,和数据库的对比获取?
当到达脚本尾部或出现了未能捕捉到的异常时,Ruby会结束程序(当调用函数exit、abort或对主线程发出Thread.kill命令时,会引发SystemExit异常)。结束程序时会依次进行下列处理。 对所有线程执行Thread.kill。 若注册了Ruby的伪信号SIGEXIT的处理程序的话,就执行它(请参考trap)。 若注册了END块(END {...}或at_end函数指定的块)的话,就以
本文向大家介绍了解java Struts拦截器的相关操作,包括了了解java Struts拦截器的相关操作的使用技巧和注意事项,需要的朋友参考一下 实现aop的方式 用于实现action之前 一般用于事物操作. 一般用于对某些未授权的页面访问的时候,进行拦截操作,拦截非法访问. 开箱即用拦截器 必须有传递属性这个拦截器 运行输出日志如下 可以看到这个action一共运行耗时12ms 自定义拦截器