2016-06-29 9 views
0

tun Ich verwende den folgenden Code für Bild hochladenNoClassDefFoundError wenn Multipart-Upload von Bild

package com.purpletab.warehouse.utils; 

import android.util.Log; 

import com.android.volley.AuthFailureError; 
import com.android.volley.NetworkResponse; 
import com.android.volley.ParseError; 
import com.android.volley.Request; 
import com.android.volley.Response; 
import com.android.volley.VolleyLog; 
import com.android.volley.toolbox.HttpHeaderParser; 
import com.google.gson.Gson; 

import org.apache.http.HttpEntity; 
import org.apache.http.entity.ContentType; 
import org.apache.http.entity.mime.MultipartEntityBuilder; 

import java.io.ByteArrayOutputStream; 
import java.io.File; 
import java.io.IOException; 
import java.io.UnsupportedEncodingException; 
import java.util.Map; 

/** 
* Created by macpurple8 on 15/06/16. 
*/ 
public class MultipartRequest extends Request { 
    private static final String KEY_PICTURE = "picture"; 
    private static final String KEY_FILE = "file"; 
    private static final String TAG = "MutlipartRequest"; 

    private HttpEntity mHttpEntity; 
    private final Class mClass; 
    private Response.Listener mListener; 
    private Map mHeaders; 
    private final Gson gson; 

    public MultipartRequest(String url, File file, String imageName, 
          Class clazz, 
          Map headers, 
          Response.Listener listener, 
          Response.ErrorListener errorListener) { 
     super(Method.POST, url, errorListener); 
     mHeaders = headers; 
     mClass = clazz; 
     mListener = listener; 
     gson = new Gson(); 
     mHttpEntity = buildMultipartEntity(file, imageName); 
    } 

    public MultipartRequest(String url, String path, String imageName, 
          Class clazz, 
          Map headers, 
          Response.Listener listener, 
          Response.ErrorListener errorListener) { 
     super(Method.POST, url, errorListener); 
     mHeaders = headers; 
     mClass = clazz; 
     mListener = listener; 
     gson = new Gson(); 
     mHttpEntity = buildMultipartEntity(path, imageName); 
    } 

    private HttpEntity buildMultipartEntity(String path, String imageName) { 
     File file = new File(path); 
     return buildMultipartEntity(file, imageName); 
    } 

    private HttpEntity buildMultipartEntity(File file, String imageName) { 
     MultipartEntityBuilder builder = MultipartEntityBuilder.create(); 
     String fileName = file.getName(); 

     System.out.println("file name .. .. " + imageName); 

     //builder.addBinaryBody(KEY_PICTURE, file, ContentType.create("image/jpeg"), imageName); 
     builder.addBinaryBody(KEY_FILE, file, ContentType.create("image/jpeg"), imageName); 
     return builder.build(); 
    } 

    @Override 
    public Map getHeaders() throws AuthFailureError { 
     return mHeaders != null ? mHeaders : super.getHeaders(); 
    } 

    @Override 
    public String getBodyContentType() { 
     return mHttpEntity.getContentType().getValue(); 
    } 

    @Override 
    public byte[] getBody() throws AuthFailureError { 
     ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
     try { 
      mHttpEntity.writeTo(bos); 
     } catch (IOException e) { 
      VolleyLog.e("IOException writing to ByteArrayOutputStream"); 
     } 
     return bos.toByteArray(); 
    } 

    @Override 
    protected Response parseNetworkResponse(NetworkResponse response) { 
     String json; 
     try { 
      json = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); 
     } catch (UnsupportedEncodingException e) { 
      Log.e(TAG, String.format("Encoding problem parsing API response. NetworkResponse:%s", response.toString()), e); 
      return Response.error(new ParseError(e)); 
     } 
     /*try { 
      return Response.success(gson.fromJson(json, mClass), HttpHeaderParser.parseCacheHeaders(response)); 
     } catch (JsonSyntaxException e) { 
      Log.e(TAG, String.format("Couldn't API parse JSON response. NetworkResponse:%s", response.toString()), e); 
      Log.e(TAG, String.format("Couldn't API parse JSON response. Json dump: %s", json)); 
      return Response.error(new ParseError(e)); 
     } 
*/ 
     Log.e(TAG, String.format("Couldn't API parse JSON response. Json dump: %s", json)); 

     return Response.success(response.toString(), HttpHeaderParser.parseCacheHeaders(response)); 

    } 

    /** 
    * Subclasses must implement this to perform delivery of the parsed 
    * response to their listeners. The given response is guaranteed to 
    * be non-null; responses that fail to parse are not delivered. 
    * 
    * @param response The parsed response returned by 
    *     {@link #parseNetworkResponse(NetworkResponse)} 
    */ 
    @Override 
    protected void deliverResponse(Object response) { 
     mListener.onResponse(response); 
    } 


    /** 
    * Compares this object to the specified object to determine their relative 
    * order. 
    * 
    * @param another the object to compare to this instance. 
    * @return a negative integer if this instance is less than {@code another}; 
    * a positive integer if this instance is greater than 
    * {@code another}; 0 if this instance has the same order as 
    * {@code another}. 
    * @throws ClassCastException if {@code another} cannot be converted into something 
    *       comparable to {@code this} instance. 
    */ 
    @Override 
    public int compareTo(Object another) { 
     return 0; 
    } 
} 

die Methode auszulösen ich den Code unten

MultipartRequest request = new MultipartRequest(url, new File(imagepath), imageName, 
            Response.class, null, new Response.Listener() { 
           @Override 
           public void onResponse(Object response) { 
            System.out.println("Uploaded to server"); 

           } 
          }, new Response.ErrorListener() { 
           @Override 
           public void onErrorResponse(VolleyError error) { 
            System.out.println("Upload failed " + error.getMessage()); 
           } 
          }); 
          request.setRetryPolicy(new DefaultRetryPolicy(
            AppConstants.SOCKET_TIMEOUT_MS, 
            DefaultRetryPolicy.DEFAULT_MAX_RETRIES, 
            DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 
          baseApp.addToRequestQueue(request, "a tag"); 

die Fehler, die ich bekommen rufe ist als folgt ..

E/AndroidRuntime: FATAL EXCEPTION: main 
                     Process: com.purpletab.warehouse, PID: 14595 
                     java.lang.NoClassDefFoundError: org.apache.http.util.Args 
                      at org.apache.http.entity.mime.content.AbstractContentBody.<init>(AbstractContentBody.java:48) 
                      at org.apache.http.entity.mime.content.FileBody.<init>(FileBody.java:96) 
                      at org.apache.http.entity.mime.MultipartEntityBuilder.addBinaryBody(MultipartEntityBuilder.java:141) 
                      at com.purpletab.warehouse.utils.MultipartRequest.buildMultipartEntity(MultipartRequest.java:76) 
                      at com.purpletab.warehouse.utils.MultipartRequest.<init>(MultipartRequest.java:48) 
                      at com.purpletab.warehouse.fragments.FormPageFragment$override.onClick(FormPageFragment.java:329) 
                      at com.purpletab.warehouse.fragments.FormPageFragment$override.access$dispatch(FormPageFragment.java) 
                      at com.purpletab.warehouse.fragments.FormPageFragment.onClick(FormPageFragment.java:0) 
                      at android.view.View.performClick(View.java:4438) 
                      at android.view.View$PerformClick.run(View.java:18431) 
                      at android.os.Handler.handleCallback(Handler.java:733) 
                      at android.os.Handler.dispatchMessage(Handler.java:95) 
                      at android.os.Looper.loop(Looper.java:149) 
                      at android.app.ActivityThread.main(ActivityThread.java:5061) 
                      at java.lang.reflect.Method.invokeNative(Native Method) 
                      at java.lang.reflect.Method.invoke(Method.java:515) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:603) 
                      at dalvik.system.NativeStart.main(Native Method) 

Antwort

0

Versuchen Sie diese Zeile hinzufügen:

useLibrary 'org.apache.http.legacy' 

zu Ihrer android Schließung in App build.gradle Datei. Diese apache.http pacakge wurde in Android 6 als veraltet eingestuft.

+0

ich bin cheking mit einem kitkat gerät. Jedenfalls habe ich es versucht. aber das gleiche Problem ist da ..! – Minto

Verwandte Themen