好的,我要做的是打开一个图像,在一个图像视图中设置它,并使它成为一个文件,以便使用volley在一个多部分形式的请求中发送它,现在我正在使用PostMan向我的服务器发出Http请求(字符串和文件),它工作正常,但我不能在安卓中实现它,到目前为止,我所拥有的是这样的
public void onClick(View v) {
if(v == banner){
Intent intent = new Intent();
//Verified the android version
if(Build.VERSION.SDK_INT < 19){
intent.setAction(Intent.ACTION_GET_CONTENT);
} else{
//KitKat 4.4 o superior
intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
}
intent.setType("image/*");
startActivityForResult(intent, request_code);
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == Activity.RESULT_OK && requestCode == request_code) {
uri = data.getData();
banner.setImageURI(uri);
//TAG for store the Uri to the selected file
banner.setTag(uri);
path = uri.getPath();
fileImage = new File (path);
Toast.makeText(this,path,Toast.LENGTH_LONG).show();}其中banner是我的图像视图,fileImage是我的文件
MultipartRequest myRequest = new MultipartRequest(
"MY_URL",
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.e("error");
}
},
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
VolleyLog.e(response);
}
},
fileImage,
params
);我正在使用在另一个问题中回答的这个类。
public class MultipartRequest extends Request<String> {
//private MultipartEntity entity = new MultipartEntity();
MultipartEntityBuilder entity = MultipartEntityBuilder.create();
HttpEntity httpentity;
private static final String FILE_PART_NAME = "banner";
private final Response.Listener<String> mListener;
private final File mFilePart;
private final Map<String, String> mStringPart;
public MultipartRequest(String url, Response.ErrorListener errorListener,
Response.Listener<String> listener,
File file,
Map<String, String> mStringPart) {
super(Method.POST, url, errorListener);
mListener = listener;
mFilePart = file;
this.mStringPart = mStringPart;
entity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
buildMultipartEntity();
}
public void addStringBody(String param, String value) {
mStringPart.put(param, value);
}
private void buildMultipartEntity() {
entity.addPart(FILE_PART_NAME, new FileBody(mFilePart));
for (Map.Entry<String, String> entry : mStringPart.entrySet()) {
entity.addTextBody(entry.getKey(), entry.getValue());
}
}
@Override
public String getBodyContentType() {
return httpentity.getContentType().getValue();
}
@Override
public byte[] getBody() throws AuthFailureError {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
httpentity = entity.build();
httpentity.writeTo(bos);
} catch (IOException e) {
VolleyLog.e("IOException writing to ByteArrayOutputStream");
}
return bos.toByteArray();
}
@Override
protected Response<String> parseNetworkResponse(NetworkResponse response) {
return Response.success("Uploaded", getCacheEntry());
}
@Override
protected void deliverResponse(String response) {
mListener.onResponse(response);
}}
但它返回错误"IOException writing to ByteArrayOutputStream“
发布于 2015-07-06 15:35:44
如果您的目标只是将图像保存到文件中,请查看这篇文章,您需要首先将接收到的图像转换为位图,然后只需遵循that帖子中的内容
https://stackoverflow.com/questions/31238567
复制相似问题