大佬教程收集整理的这篇文章主要介绍了android – 通过排球投掷错误上传图片.拥有图像数组和文本数组,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
> key1 =字符串值
> key2 =字符串值
> key3 {= filE} =图像值,即jpeg,jpg
import com.android.volley.AuthFailureError; import com.android.volley.NetworkResponse; import com.android.volley.request; import com.android.volley.Response; import com.android.volley.VolleyError; import com.android.volley.VolleyLog; import com.android.volley.toolBox.httpHeaderParser; import <APP_CLASS IGNORE THIS>.Config import org.apache.http.entity.ContentType; import org.apache.http.entity.mime.httpR_555_11845@ultipartMode; import org.apache.http.entity.mime.multipartentityBuilder; import org.apache.http.entity.mime.content.FileBody; import org.apache.http.util.CharsetUtils; import java.io.byteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Set; /** * Created by Jimit Patel on 26/09/15. */ public class MyClass extends request<String> { private static final String TAG = MyClass.class.getSimplename(); private static final Boolean IS_DEBUG = true; private static final String FILE_PARt_name = "file"; private multipartentityBuilder multipartentityBuilder; private Response.Listener<String> mListener; private Map<String,String> mrequestParams; private File file; private String tokenId; public AddWARDroberequest(int method,String url,Response.Listener<String> listener,Response.ErrorListener errorListener,File file,Map<String,String> requestParams,String tokenId) { super(method,url,errorListener); mListener = listener; this.file = file; this.tokenId = tokenId; mrequestParams = requestParams; buildmultipartentity(); } @Override protected Response<String> parseNetworkResponse(NetworkResponse responsE) { return Response.success("Result",getCacheEntry()); } @Override protected void deliverResponse(String responsE) { mlistener.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<>(); } headers.put(Config.HEADER_AUTHORIZATION,"Bearer " + tokenId); // headers.put("Accept","application/json"); // headers.put("Content-Type","multipart/form-data"); return headers; } @Override public String getBodyContentType() { String contentTypeHeader = multipartentityBuilder.build().getContentType().getValue(); return contentTypeHeader; } @Override public byte[] getBody() throws AuthFailureError { ByteArrayOutputStream bos = new ByteArrayOutputStream(); try { multipartentityBuilder.build().writeTo(bos); } catch (IOException E) { VolleyLog.e("IOException wriTing to ByteArrayOutputStream bos,building the multipart request."); } return bos.toByteArray(); } private void buildmultipartentity() { multipartentityBuilder = multipartentityBuilder.create(); multipartentityBuilder.setMode(httpR_555_11845@ultipartMode.bROWSER_COMPATIBLE); // multipartentityBuilder.setLaxMode().setBoundary("xx").setCharset(Charset.forName("UTF-8")); // try { // multipartentityBuilder.setCharset(CharsetUtils.get("UTF-8")); // } catch (UnsupportedEncodingException E) { // e.printStackTrace(); // } multipartentityBuilder.addPart(FILE_PARt_name,new FileBody(filE) ); Set<String> keys = mrequestParams.keySet(); for (String key : keys) multipartentityBuilder.addTextBody(key,mrequestParams.get(key)); } }
以下是我所面临的错误.
Process: com.stylabs.APP.app,PID: 12804 java.lang.NoSuchFieldError: No static field INSTANCE of type Lorg/apache/http/message/BasicHeaderValueFormatter; in class Lorg/apache/http/message/BasicHeaderValueFormatter; or its superclasses (declaration of 'org.apache.http.message.basicHeaderValueFormatter' appears in /system/framework/ext.jar) at org.apache.http.entity.ContentType.toString(ContentType.java:153) at org.apache.http.entity.mime.MultipartFormEntity.<init>(MultipartFormEntity.java:53) at org.apache.http.entity.mime.multipartentityBuilder.buildEntity(multipartentityBuilder.java:236) at org.apache.http.entity.mime.multipartentityBuilder.build(multipartentityBuilder.java:240) at MyClass.getBody(MyClass.java:90) at com.android.volley.toolBox.HurlStack.addBodyIfExists(HurlStack.java:253) at com.android.volley.toolBox.HurlStack.setConnectionParametersForrequest(HurlStack.java:227) at com.android.volley.toolBox.HurlStack.performrequest(HurlStack.java:107) at com.android.volley.toolBox.basicNetwork.performrequest(BasicNetwork.java:96) at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:112)
请帮帮我.先感谢您!!
解
虽然标记为重复,但我没有在那里找到任何解决方案.我终于揭开了我所遗忘的一切.我重读了android上的文档,我可以在这里找到它 – http://developer.android.com/preview/behavior-changes.html#behavior-apache-http-client
所以我已经删除了所有那些httpcomponents,其中包括httpcore,httpR_555_11845@ime,httpclient等.现在不知道哪些垃圾堆栈的东西都被建议堆栈溢出,所有这些都是正确的,直到昨天但不是M预览.而不是那个添加
android { useLibrary 'org.apache.http.legacy' }
之前使用过的请求类更改如下 –
import android.graphics.bitmap; import android.graphics.bitmapFactory; import com.android.volley.AuthFailureError; import com.android.volley.NetworkResponse; import com.android.volley.request; import com.android.volley.Response; import com.android.volley.VolleyError; import <APP_CLASS IGNORE THIS>.Config import java.io.byteArrayInputStream; import java.io.byteArrayOutputStream; import java.io.DataOutputStream; import java.io.File; import java.io.IOException; import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Set; /** * Created by Jimit Patel on 26/09/15. */ public class MyClass extends request<String> { private static final String TAG = AddWARDroberequest.class.getSimplename(); private static final Boolean IS_DEBUG = true; // This is the key for the file to be sent private static final String FILE_PARt_name = "file"; private Response.Listener<String> mListener; private Response.ErrorListener mErrorListener; private Map<String,String> mrequestParams; private File file; private String tokenId; private final String BOUNDARY = "3i2ndDfv2rTHiSisAbouNdArYfORhttpEefj3q2f"; private final String CRLF = "\r\n"; private final int MAX_BUFFER_SIZE = 1024 * 1024; public MyClass(int method,String tokenId) { super(method,errorListener); mListener = listener; mErrorListener = errorListener; this.file = file; this.tokenId = tokenId; mrequestParams = requestParams } @Override protected Response<String> parseNetworkResponse(NetworkResponse responsE) { return Response.success(new String(response.data),getCacheEntry()); } @Override protected void deliverResponse(String responsE) { mlistener.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<>(); } headers.put(Config.HEADER_AUTHORIZATION,"Bearer " + tokenId); headers.put("Content-Type","multipart/form-data; boundary=" + BOUNDARY); return headers; } @Override protected VolleyError parseNetworkError(VolleyError volleyError) { return super.parseNetworkError(volleyError); } @Override public void deliverError(VolleyError error) { mErrorlistener.onErrorResponse(error); } @Override public byte[] getBody() throws AuthFailureError { ByteArrayOutputStream bos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(bos); try { PrintWriter pw = new PrintWriter(new OutputStreamWriter(dos,"UTF-8")); Set<String> keys = mrequestParams.keySet(); pw.append(CRLF); for (String key : keys) { pw.append("--" + BOUNDARY + CRLF); pw.append("Content-Disposition: form-data; "); pw.append("name=\"" + key + "\"" + CRLF + CRLF + mrequestParams.get(key) + CRLF); } pw.append("--" + BOUNDARY + CRLF); pw.append("Content-Disposition: form-data; "); pw.append("name=\"" + FILE_PARt_name + "\"; filename=\"" + file.getName() + "\"" + CRLF + CRLF); dos.writeBytes(pw.toString()); pw.flush(); FileInputStream inputStream = new FileInputStream(filE); int bytesAvailable = inputStream.available(); int bufferSize = Math.min(bytesAvailable,MAX_BUFFER_SIZE); byte[] buffer = new byte[bufferSize]; int bytesRead; while ((bytesRead = inputStream.read(buffer)) != -1) dos.write(buffer,bytesRead); dos.writeBytes(CRLF + "--" + BOUNDARY + "--" + CRLF); } catch (IOException E) { e.printStackTrace(); } return bos.toByteArray(); } }
最后得到了正确的响应.我希望这能帮助那些和我一样陷入困境的人.
以上是大佬教程为你收集整理的android – 通过排球投掷错误上传图片.拥有图像数组和文本数组全部内容,希望文章能够帮你解决android – 通过排球投掷错误上传图片.拥有图像数组和文本数组所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。