ошибка загрузки файла на сервер с помощью log-VFY: не удается разрешить статическое поле 44070

В моем проекте android я загружаю zip-файл на сервер с помощью запроса HTTP post . В этом случае я использую библиотеки httpcore и httpmime. Я использую AsyncTask для загрузки. метод doInBackground AsyncTask выглядит следующим образом,

@Override
        protected String doInBackground(String... params) {

            try {
                String serverLoaction = params[0];
                String filePath = params[1];

                HttpClient httpClient = new DefaultHttpClient();
                HttpContext localContext = new BasicHttpContext();
                HttpPost httpPost = new HttpPost(serverLoaction);

                MultipartEntityBuilder builder = MultipartEntityBuilder.create();
                builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);

                FileBody fileBody = new FileBody(new File(filePath));
                StringBody stringBody = new StringBody("data", ContentType.MULTIPART_FORM_DATA);

                builder.addPart("file", fileBody);
                builder.addPart("name", stringBody);

                httpPost.setEntity(builder.build());

                HttpResponse response = httpClient.execute(httpPost, localContext);

                BufferedReader reader = new BufferedReader(
                            new InputStreamReader(
                                    response.getEntity().getContent(), "UTF-8"));

                String sResponse = reader.readLine();
                return sResponse;

            } catch (Exception e) {
                if (dialog.isShowing())
                    dialog.dismiss();
                Toast.makeText(getApplicationContext(), "Error in downloading image", Toast.LENGTH_LONG).show();
                Log.e(e.getClass().getName(), e.getMessage(), e);
                return null;
            }

код компилируется и выполняется хорошо. но когда задача upload выполняется, он не загружает файл и в журнале он показывает ниже массаж .

05-03 14:29:00.223 27471-27687/com.x.l D/dalvikvm: DexOpt: couldn't find static field Lorg/apache/http/message/BasicHeaderValueParser;.INSTANCE
05-03 14:29:00.223 27471-27687/com.x.l W/dalvikvm: VFY: unable to resolve static field 44070 (INSTANCE) in Lorg/apache/http/message/BasicHeaderValueParser;
05-03 14:29:00.223 27471-27687/com.x.l D/dalvikvm: VFY: replacing opcode 0x62 at 0x001b
05-03 14:29:00.233 27471-27687/com.x.l D/dalvikvm: DexOpt: couldn't find static field Lorg/apache/http/message/BasicHeaderValueFormatter;.INSTANCE
05-03 14:29:00.233 27471-27687/com.x.l W/dalvikvm: VFY: unable to resolve static field 44065 (INSTANCE) in Lorg/apache/http/message/BasicHeaderValueFormatter;
05-03 14:29:00.233 27471-27687/com.x.l D/dalvikvm: VFY: replacing opcode 0x62 at 0x0015

но это не дает никакой ошибки . поэтому я потратил много времени, пытаясь понять это, и у меня ничего не получилось.

зависимости в моей сборке.gradle файл, как показано ниже,

dependencies {
    compile project(':volley')
    compile 'com.android.support:support-v4:22.2.1'
    compile 'com.android.support:appcompat-v7:21.0.3'
    compile 'com.android.support:multidex:'
    compile 'org.apache.httpcomponents:httpcore:4.4.4'
    compile'org.apache.httpcomponents:httpmime:4.3.6'

}

Редактированной…….
в соответствии с ответом stac я отредактировал свой код и добавил следующие две части

String boundary = "-------------" + System.currentTimeMillis();

                httpPost.setHeader("Content-type", "multipart/form-data; boundary=" + boundary);

и

builder.setBoundary(boundary);

Итак, мой последний код таков.

@Override
    protected String doInBackground(String... params) {

        try {

            String serverLoaction = params[0];
            String filePath = params[1];

            HttpClient httpClient = new DefaultHttpClient();
            HttpContext localContext = new BasicHttpContext();
            HttpPost httpPost = new HttpPost(serverLoaction);

            String boundary = "-------------" + System.currentTimeMillis();

            httpPost.setHeader("Content-type", "multipart/form-data; boundary=" + boundary);

            MultipartEntityBuilder builder = MultipartEntityBuilder.create();
            builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
            builder.setBoundary(boundary);

            FileBody fileBody = new FileBody(new File(filePath));
            StringBody stringBody = new StringBody("data", ContentType.MULTIPART_FORM_DATA);

            builder.addPart("file", fileBody);
            builder.addPart("name", stringBody);

            httpPost.setEntity(builder.build());

            HttpResponse response = httpClient.execute(httpPost, localContext);

            BufferedReader reader = new BufferedReader(
                        new InputStreamReader(
                                response.getEntity().getContent(), "UTF-8"));

            String sResponse = reader.readLine();
            return sResponse;

        } catch (Exception e) {
            if (dialog.isShowing())
                dialog.dismiss();
            Toast.makeText(getApplicationContext(), "Error in downloading image", Toast.LENGTH_LONG).show();
            Log.e(e.getClass().getName(), e.getMessage(), e);
            return null;
        }
    }

так что теперь это не показывает, что ошибка я упоминал выше. но все еще не загружает файл.
что не так с моим кодом. может ли кто-то предложить мне возможное решение этой проблемы. Спасибо и с уважением!

1 ответ

  1. I использование библиотеки volley для загрузки файла.
    Надеюсь, этот код поможет вам.
    Это класс i, используемый для запроса к серверу.

    открытый класс OnPostNewtRequest расширяет JsonRequest {
    Multipartentitybuilder entity = MultipartEntityBuilder.создавать();
    Httpentity httpentity;
    частный окончательный ответ.Слушатель mListener;
    частный файл mFilePart = null;
    частный файл mFileVideos = null;
    частная итоговая карта mStringPart;

    public OnPostNewtRequest(String url, Response.ErrorListener errorListener,
                             Response.Listener<JSONObject> listener, File file,
                             File fileVideos, Map<String, String> mStringPart) {
        super(Method.POST, url, null, listener, errorListener);
        mListener = listener;
        mFilePart = file;
        mFileVideos = fileVideos;
        this.mStringPart = mStringPart;
        entity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
        buildMultipartEntity();
    }
    
    public void addStringBody(String param, String value) {
        mStringPart.put(param, value);
    }
    
    private void buildMultipartEntity() {
        if (mFileVideos != null)
            entity.addBinaryBody(Constant.KEY_FILE_VIDEO, mFileVideos, ContentType.create("video/mp4"), mFileVideos.getName());
        if (mFilePart != null)
            entity.addBinaryBody(Constant.KEY_FILE, mFilePart, ContentType.create("image/jpeg"), mFilePart.getName());
        for (Map.Entry<String, String> entry : mStringPart.entrySet()) {
            try {
                entity.addPart(entry.getKey(), new StringBody(entry.getValue(), Charset.defaultCharset()));
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }
    }
    
    @Override
    public String getBodyContentType() {
        return httpentity.getContentType().getValue();
    }
    
    @Override
    public byte[] getBody() {
        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<JSONObject> parseNetworkResponse(NetworkResponse response) {
        try {
            String jsonString =
                    new String(response.data, HttpHeaderParser.parseCharset(response.headers));
            return Response.success(new JSONObject(jsonString),
                    HttpHeaderParser.parseCacheHeaders(response));
        } catch (UnsupportedEncodingException e) {
            return Response.error(new ParseError(e));
        } catch (JSONException je) {
            return Response.error(new ParseError(je));
        }
    }
    
    @Override
    protected void deliverResponse(JSONObject response) {
        mListener.onResponse(response);
    }
    

    }

    И как использовать этот запрос.
    1 . Сначала вы используете

    карту params = new HashMap();
    Добавление «ключа» и значений в params пример : params.put (Constant.KEY_WORD, mTag);.

    Шаг 2 .

    Onpostnewtrequest multipartRequest = новый OnPostNewtRequest (Константа.URL_UP_POST, новый ответ.ErrorListener() {
    @Отменять
    public void onErrorResponse(VolleyError error) {
    if (mAction != недействительный) {
    mAction.onError (ошибка);
    }
    увольнять();
    ошибка.printStackTrace();
    }
    }, новый ответ.Слушатель() {
    @Отменять
    открытый void onResponse (ответ JSONObject) {

            }
        }, linkFileImage, fileVideos, params);
    
        YourApplication.getInstance().addToRequestQueue(multipartRequest);
    

    Надеюсь это поможет вам.