2016-02-25 27 views
9

Voglio caricare l'immagine utilizzando okhttp ma non riesco a trovare MultipartBuilder per Post Image.What posso usare al posto di questo.Caricamento immagine tramite okHttp

Ecco il mio codice

public static JSONObject uploadImage(File file) { 

     try { 

      final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png"); 

      RequestBody req = new MultipartBuilder().setType(MultipartBody.FORM).addFormDataPart("userid", "8457851245") 
        .addFormDataPart("userfile","profile.png", RequestBody.create(MEDIA_TYPE_PNG, file)).build(); 

      Request request = new Request.Builder() 
        .url("url") 
        .post(req) 
        .build(); 

      OkHttpClient client = new OkHttpClient(); 
      Response response = client.newCall(request).execute(); 

      Log.d("response", "uploadImage:"+response.body().string()); 

      return new JSONObject(response.body().string()); 

     } catch (UnknownHostException | UnsupportedEncodingException e) { 
      Log.e(TAG, "Error: " + e.getLocalizedMessage()); 
     } catch (Exception e) { 
      Log.e(TAG, "Other Error: " + e.getLocalizedMessage()); 
     } 
     return null; 
    } 

Grazie in anticipo.

risposta

5

è necessario utilizzare

Multipartbody.Builder() 

Invece di

MultipartBuilder 

Il suo lavoro

+0

E 'perfettamente funzionante. Grazie ancora – Dhaval

+0

Your welcome @DhavalShah – RushDroid

4

Ecco la classe di richiesta di più parti.

import java.io.File; 
import java.io.IOException; 

import org.apache.http.HttpStatus; 

import android.content.Context; 

import com.esp.ro.util.Config; 
import com.esp.ro.util.Log; 
import com.squareup.okhttp.MediaType; 
import com.squareup.okhttp.MultipartBuilder; 
import com.squareup.okhttp.OkHttpClient; 
import com.squareup.okhttp.Request; 
import com.squareup.okhttp.RequestBody; 
import com.squareup.okhttp.Response; 


public class MultipartRequest { 

public Context caller; 
public MultipartBuilder builder; 
private OkHttpClient client; 

public MultipartRequest(Context caller) { 
    this.caller = caller; 
    this.builder = new MultipartBuilder(); 
    this.builder.type(MultipartBuilder.FORM); 
    this.client = new OkHttpClient(); 
} 

public void addString(String name, String value) { 
    this.builder.addFormDataPart(name, value); 
} 

public void addFile(String name, String filePath, String fileName) { 
    this.builder.addFormDataPart(name, fileName, RequestBody.create(
      MediaType.parse("image/jpeg"), new File(filePath))); 
} 

public void addTXTFile(String name, String filePath, String fileName) { 
    this.builder.addFormDataPart(name, fileName, RequestBody.create(
      MediaType.parse("text/plain"), new File(filePath))); 
} 

public void addZipFile(String name, String filePath, String fileName) 
{ 
    this.builder.addFormDataPart(name, fileName, RequestBody.create(
      MediaType.parse("application/zip"), new File(filePath))); 
} 

public String execute(String url) { 
    RequestBody requestBody = null; 
    Request request = null; 
    Response response = null; 

    int code = 200; 
    String strResponse = null; 

    try { 
     requestBody = this.builder.build(); 
     request = new Request.Builder().header("AUTH-KEY", Config.API_KEY) 
       .url(url).post(requestBody).build(); 

     Log.print("::::::: REQ :: " + request); 
     response = client.newCall(request).execute(); 
     Log.print("::::::: response :: " + response); 

     if (!response.isSuccessful()) 
      throw new IOException(); 

     code = response.networkResponse().code(); 

     if (response.isSuccessful()) { 
      strResponse = response.body().string(); 
     } else if (code == HttpStatus.SC_NOT_FOUND) { 
      // ** "Invalid URL or Server not available, please try again" */ 
      strResponse = caller.getResources().getString(
        R.string.error_invalid_URL); 
     } else if (code == HttpStatus.SC_REQUEST_TIMEOUT) { 
      // * "Connection timeout, please try again", */ 
      strResponse = caller.getResources().getString(
        R.string.error_timeout); 
     } else if (code == HttpStatus.SC_SERVICE_UNAVAILABLE) { 
      // * 
      // "Invalid URL or Server is not responding, please try again", 
      // */ 
      strResponse = caller.getResources().getString(
        R.string.error_server_not_responding); 
     } 
    } catch (Exception e) { 
     Log.error("Exception", e); 
     Log.print(e); 
    } finally { 
     requestBody = null; 
     request = null; 
     response = null; 
     builder = null; 
     if (client != null) 
      client = null; 
     System.gc(); 
    } 
    return strResponse; 
    } 
} 

Spero che questo ti aiuti.

Nota: se si utilizza il vecchio OkHttp che è inferiore alla versione 3, è possibile utilizzare questo metodo. Se si utilizza la versione 3 o successiva, here is the answer for you.

3

ho usato in questo modo in OKHTTP 3.4.1

funzione di chiamata in questo modo

if (!realPath.equals("")) { 

      new SignupWithImageTask().execute(et_name.getText().toString(), et_email.getText().toString(), et_dob.getText().toString(), IMEI, et_mobile.getText().toString(), realPath); 

     } else { 
      Toast.makeText(this, "Profile Picture not found", Toast.LENGTH_SHORT).show(); 
     } 

SignupWithImageTask

public class SignupWithImageTask extends AsyncTask<String, Integer, String> { 

     ProgressDialog progressDialog; 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      progressDialog = new ProgressDialog(SignupActivity.this); 
      progressDialog.setMessage("Please Wait...."); 
      progressDialog.show(); 
     } 

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

      String res = null; 
      try { 
//    String ImagePath = str[0]; 
       String name = str[0], email = str[1], dob = str[2], IMEI = str[3], phone = str[4], ImagePath = str[5]; 

       File sourceFile = new File(ImagePath); 

       Log.d("TAG", "File...::::" + sourceFile + " : " + sourceFile.exists()); 

       final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/*"); 

       String filename = ImagePath.substring(ImagePath.lastIndexOf("/") + 1); 

       /** 
       * OKHTTP2 
       */ 
//   RequestBody requestBody = new MultipartBuilder() 
//     .type(MultipartBuilder.FORM) 
//     .addFormDataPart("member_id", memberId) 
//     .addFormDataPart("file", "profile.png", RequestBody.create(MEDIA_TYPE_PNG, sourceFile)) 
//     .build(); 

       /** 
       * OKHTTP3 
       */ 
       RequestBody requestBody = new MultipartBody.Builder() 
         .setType(MultipartBody.FORM) 
         .addFormDataPart("image", filename, RequestBody.create(MEDIA_TYPE_PNG, sourceFile)) 
         .addFormDataPart("result", "my_image") 
         .addFormDataPart("name", name) 
         .addFormDataPart("email", email) 
         .addFormDataPart("dob", dob) 
         .addFormDataPart("IMEI", IMEI) 
         .addFormDataPart("phone", phone) 
         .build(); 

       Request request = new Request.Builder() 
         .url(BASE_URL + "signup") 
         .post(requestBody) 
         .build(); 

       OkHttpClient client = new OkHttpClient(); 
       okhttp3.Response response = client.newCall(request).execute(); 
       res = response.body().string(); 
       Log.e("TAG", "Response : " + res); 
       return res; 

      } catch (UnknownHostException | UnsupportedEncodingException e) { 
       Log.e("TAG", "Error: " + e.getLocalizedMessage()); 
      } catch (Exception e) { 
       Log.e("TAG", "Other Error: " + e.getLocalizedMessage()); 
      } 


      return res; 

     } 

     @Override 
     protected void onPostExecute(String response) { 
      super.onPostExecute(response); 
      if (progressDialog != null) 
       progressDialog.dismiss(); 

      if (response != null) { 
       try { 

        JSONObject jsonObject = new JSONObject(response); 


        if (jsonObject.getString("message").equals("success")) { 

         JSONObject jsonObject1 = jsonObject.getJSONObject("data"); 

         SharedPreferences settings = getSharedPreferences("preference", 0); // 0 - for private mode 
         SharedPreferences.Editor editor = settings.edit(); 
         editor.putString("name", jsonObject1.getString("name")); 
         editor.putString("userid", jsonObject1.getString("id")); 
         editor.putBoolean("hasLoggedIn", true); 
         editor.apply(); 

         new UploadContactTask().execute(); 

         startActivity(new Intent(SignupActivity.this, MainActivity.class)); 
        } else { 
         Toast.makeText(SignupActivity.this, "" + jsonObject.getString("message"), Toast.LENGTH_SHORT).show(); 
        } 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } else { 
       Toast.makeText(SignupActivity.this, "Something Went Wrong", Toast.LENGTH_SHORT).show(); 
      } 

     } 
    } 
2
OkHttpClient client = new OkHttpClient.Builder().connectTimeout(10, TimeUnit.SECONDS).writeTimeout(180, TimeUnit.SECONDS).readTimeout(180, TimeUnit.SECONDS).build(); 
    RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM) 
      .addFormDataPart("File", path.getName(),RequestBody.create(MediaType.parse("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"),path)) 
      .addFormDataPart("username", username) 
      .addFormDataPart("password", password) 
      .build(); 
    Request request = new Request.Builder().url(url).post(body).build(); 
    Response response = client.newCall(request).execute(); 
    result = response.body().string(); 

Click here per sapere come ricevere i dati nel server per questa richiesta