参见英文答案 > Getting NoSuchFieldError INSTANCE org/apache/http/message/BasicHeaderValueParser 4个
解决方案如下
我正在使用凌空库上传图片.条件是我要求发送
> 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>.Configimport org.apache.http.entity.@R_502_3317@;import org.apache.http.entity.mime.httpMultipartMode;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 getbody@R_502_3317@() { String @R_502_3317@header = multipartentityBuilder.build().get@R_502_3317@().getValue(); return @R_502_3317@header; } @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(httpMultipartMode.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: 12804java.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.@[email protected](@[email protected]: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,httpmime,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 url, Response.Listener<String> Listener, Response.ErrorListener errorListener, file file, Map<String, String> requestParams, String tokenID) { super(method, url, 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, 0, bytesRead); dos.writeBytes(CRLF + "--" + BOUNDARY + "--" + CRLF); } catch (IOException e) { e.printstacktrace(); } return bos.toByteArray(); } }
最后得到了正确的响应.我希望这能帮助那些和我一样陷入困境的人. 总结
以上是内存溢出为你收集整理的android – 通过排球投掷错误上传图片.拥有图像数组和文本数组全部内容,希望文章能够帮你解决android – 通过排球投掷错误上传图片.拥有图像数组和文本数组所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)