2012-11-02 11 views
6

Ho cercato di caricare un'immagine e dati su Django server. Ho incluso le librerie apache-mime4j.0.6.jar e httpmime4.0.1.jar (Progetto-> percorso di creazione-> Aggiungi file jar esterni) Ed ecco il codice per caricare un'immagine.Immagine post Android sul server utilizzando MultipartEntity

HttpResponse response = null; 
try { 
    HttpPost httppost = new HttpPost("http://10.0.2.2:8000/mobile"); 
    // HttpPost httppost = new HttpPost("some url"); 

    MultipartEntity multipartEntity = new MultipartEntity(); //MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); 
    multipartEntity.addPart("name", new StringBody("nameText")); 
    multipartEntity.addPart("place", new StringBody("placeText")); 
    multipartEntity.addPart("tag", new StringBody("tagText")); 
    //multipartEntity.addPart("Description", new StringBody(Settings.SHARE.TEXT)); 
    multipartEntity.addPart("Image", new FileBody(destination)); 
    httppost.setEntity(multipartEntity); 

    httpclient.execute(httppost, new PhotoUploadResponseHandler()); 

    } catch (Exception e) { 
    Log.e("Error","error"); 
    } 

Messaggio di errore:

Could not find class 'org.apache.http.entity.mime.MultipartEntity' 

E ho provato manualmente la creazione della cartella librerie compreso manualmente i file jar nella cartella/libs. Quando lo faccio non riesce a compilare.

Errore:

Conversion to Dalvik format failed with error 1 Unknown Android Packaging Problem 

provato a generare nuova domanda comprese le librerie. E ho incontrato lo stesso errore. Ho provato tutto il possibile. Qualcuno può dirmi perché questo succede e come risolverlo. Qualsiasi aiuto sarebbe molto apprezzato!!

risposta

0

Carico un'immagine da Android a un server Django utilizzando httpmime-4.2.1.jar. Questa è l'unica libreria che ho incluso e funziona bene. Btw: le biblioteche dovrebbero trovarsi nella cartella libs nei progetti Android.

questo è il codice che sto usando per il caricamento.

private JSONObject uploadImage(String url, File img) throws Exception{ 
    url = addAuthToken(url); 
    HttpPost post = new HttpPost(url); 
    MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); 
    FileBody fileBody = new FileBody(img, "images/jpeg"); 
    reqEntity.addPart("image", fileBody); 
    post.setEntity(reqEntity); 

    JSONObject ret = baseRequest(post); 
    checkReturnStatus(ret, 201); 

    return ret; 
} 

private JSONObject baseRequest(HttpUriRequest request) throws Exception{ 
    HttpClient client = new DefaultHttpClient(); 
    HttpResponse response = client.execute(request); 
    BufferedReader in = null; 
    try{ 
     in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 
     StringBuffer sb = new StringBuffer(); 
     String line = null; 
     String NL = System.getProperty("line.separator"); 
     while ((line = in.readLine()) != null) { 
      sb.append(line + NL); 
     } 

     return new JSONObject(sb.toString()); 
    }finally { 
     if(in != null) in.close(); 
    } 
} 
+0

Ancora lo stesso errore. MultipartEntity non trovato! – Geetanjali

+0

La libreria jar è presente nella cartella libs? Questo è necessario per essere correttamente inserito nell'APK. Puoi rimuoverlo e aggiungerlo un'altra volta. Trascinalo da un file explorer direttamente nella cartella in eclissi.Dovresti quindi vederlo sotto "Dipendenze Android", dove puoi aprirlo e vedere se la classe richiesta è in esso. – SimonSays

+0

potresti dare un esempio di utilizzo per favore ..? Sarebbe molto utile – Droidman

1

Se si utilizza nuovo android-sdk Prova questo.

  1. creare la cartella denominata come libs
  2. incollare il file jar in quella cartella.
  3. Infine, fare clic con il pulsante destro del mouse sul progetto> Crea percorso> Aggiungi archivio esterno.

Questo è tutto. Questo potrebbe aiutare. Buona fortuna.

+0

Sì, ho fatto lo stesso. L'ho menzionato – Geetanjali

+0

Hai seguito i passaggi che ho menzionato perché non dovrebbe darti l'errore di classe non trovato. Se hai appena aggiunto la libreria usando il modo in cui hai fatto, non funzionerà. Perché questo è il cambiamento nel nuovo sdk.What hai fatto è corretto con il precedente SDK ma con nuovo non funzionerà. :) – Akshay

0

Ti suggerisco di utilizzare spring-android È una buona libreria di API di riposo per Android e con Android di primavera, puoi caricare file in questo modo.

HttpHeaders requestHeaders = .... 
MultiValueMap<String, Object> message = new LinkedMultiValueMap<String, Object>(); 
message.add("qqfile", new FileSystemResource(filePath)); //attach file 

HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<MultiValueMap<String, Object>>(
      message, requestHeaders); 
RestTemplate restTemplate = RestUtil.getRestTemplate(context); 
ResponseEntity<YourResultDTO> response = restTemplate.exchange(url, HttpMethod.POST, requestEntity,YourResultDTO.class); 

E 'molto facile da usare e utilizzare Apache client HTTP su pre pan di zenzero e java.net.urlconnection su Gingerbread e più alto livello di API come suggerisce google.

+0

cosa è RestUtil? Non può essere risolto anche dopo aver importato 9 pacchetti scaricati .. e che cosa è YourResultDTO? – Droidman

+0

È necessario sostituire YourResultDTO con la propria classe DTO. Sarà l'oggetto risultato che detiene il risultato del server e se imposti correttamente spring-android, spring-android gestirà il parsing del risultato json/xml. – kingori

0

Ho avuto lo stesso problema e ho risolto in questo modo: nella finestra percorso java build, fare clic l'Ordine e la scheda Esporta Evidenziare la libreria che si desidera aggiungere quindi fare clic sul (lib caricare essere il primo) fino

Fare clic su OK e tutto è a posto.

Ecco un collegamento con le foto (Android Eclipse NoClassDefFoundError for external .jar files)