Hi friends please help me out here i am new for the retrofit i am trying use the post method in the retrofit to send the image file by converting it into base64 format but it is not uploading please friends help me out this is my code
Retrofit code
Retrofit registerretrofit = new Retrofit.Builder().baseUrl(Constant.url).client(Constant.okClient()).addConverterFactory(GsonConverterFactory.create()).build();
Api registerapi = registerretrofit.create(Api.class);
String urlbitmap=Constant.getStringImage(profilebitmap);
Call<LoginResponse> registerresponse = registerapi.getregisterdetails(namestring, emailstring, passwordstring, phonestring, citystring, landnumstring, housenumstring, adrsstring1, adrssrtring2,urlbitmap, "Android", "DeviceToken", lat, lngitude);
registerresponse.enqueue(new Callback<LoginResponse>() {
@Override
public void onResponse(Call<LoginResponse> call, Response<LoginResponse> response) {
// Constant.l(Constant.getStringImage(profilebitmap));
try {
Constant.l(String.valueOf(response));
} catch (Exception e) {
Constant.l(e.toString());
}
/*Constant.l(String.valueOf(response));
if (response.body().getStatus().equals("success")) {
Session.createlogin(getApplicationContext(), response.body().getUserid(), response.body().getName(), response.body().getEmail());
Intent loginintent = new Intent(getApplicationContext(), Login.class);
loginintent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(loginintent);
} else if (response.body().getStatus().equals("failure")) {
Constant.s(username, "Email Already Exists");
}*/
}
@Override
public void onFailure(Call<LoginResponse> call, Throwable t) {
Constant.l(t.toString());
}
});
}
Interface.java
@FormUrlEncoded
@POST("keemajson.php?action=register")
Call<LoginResponse> getregisterdetails(@Query("uname") String uname, @Query("email") String email, @Query("password") String password, @Query("phone") String phone, @Query("city") String city, @Query("landline") String landline, @Query("building_num") String building_num, @Query("address1") String address1, @Query("address2") String address2, @Field("image") String image, @Query("device_name") String device_name, @Query("device_token") String device_token, @Query("lat") String lat, @Query("lng") String lng);
Base64 Method
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] imagebytes = baos.toByteArray();
String uploadencodedImage = Base64.encodeToString(imagebytes, Base64.DEFAULT);
The Reponse i am getting is
Response{protocol=http/1.0, code=500, message=Internal Server Error, url=http://54.202.3.127/keema/keemajson.php?action=register&uname=test2&email=tester2@gmail.com&password=123456&phone=1234567890&city=KKD&landline=0884237688&building_num=12-2-18&address1=Address1&address2=Address2&device_name=Android&device_token=DeviceToken&lat=16.9952685&lng=82.2450855}
This multipart code i had used
Retrofit registerretrofit = new Retrofit.Builder().baseUrl("http://54.202.3.127/keema/").client(Constant.okClient()).addConverterFactory(GsonConverterFactory.create()).build();
Api registerapi = registerretrofit.create(Api.class);
File profilefile = new File("/storage/emulated/0/Pictures/Screenshots/Screenshot_2017-02-22-14-10-53.png");
RequestBody reqfile = RequestBody.create(MediaType.parse("image/*"), profilefile);
RequestBody actionrb = RequestBody.create(MediaType.parse("text/plain"), "register");
MultipartBody.Part body = MultipartBody.Part.createFormData("image", profilefile.getName(), reqfile);
RequestBody namerb = RequestBody.create(MediaType.parse("text/plain"), namestring);
RequestBody emailrb = RequestBody.create(MediaType.parse("text/plain"), emailstring);
RequestBody passwordrb = RequestBody.create(MediaType.parse("text/plain"), passwordstring);
RequestBody phonerb = RequestBody.create(MediaType.parse("text/plain"), phonestring);
RequestBody cityrb = RequestBody.create(MediaType.parse("text/plain"), citystring);
RequestBody adrssrb = RequestBody.create(MediaType.parse("text/plain"), adrsstring1);
RequestBody adrssrrb = RequestBody.create(MediaType.parse("text/plain"), adrssrtring2);
RequestBody landnumrb = RequestBody.create(MediaType.parse("text/plain"), landnumstring);
RequestBody housenumrb = RequestBody.create(MediaType.parse("text/plain"), housenumstring);
RequestBody devicenamerb = RequestBody.create(MediaType.parse("text/plain"), "Android");
RequestBody devicetokenrb = RequestBody.create(MediaType.parse("text/plain"), "Devicetoken");
RequestBody latrb = RequestBody.create(MediaType.parse("text/plain"), lat);
RequestBody lngrb = RequestBody.create(MediaType.parse("text/plain"), lngitude);
Call<ResponseBody> respbody = registerapi.getregisterdetails(actionrb,body, namerb, emailrb, passwordrb, phonerb, cityrb, adrssrb, adrssrrb, landnumrb, housenumrb, devicenamerb, devicetokenrb, latrb, lngrb);
respbody.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
Constant.l(String.valueOf(response));
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
Constant.l(t.toString());
}
});
}
Interface of Multipart
@Multipart
@POST("keemajson.php")
Call<ResponseBody> getregisterdetails(@Part("action") RequestBody action,@Part MultipartBody.Part image,@Part("uname") RequestBody uname, @Part("email") RequestBody email, @Part("password") RequestBody password, @Part("phone") RequestBody phone, @Part("city") RequestBody city, @Part("landline") RequestBody landline, @Part("building_num") RequestBody building_num, @Part("address1") RequestBody address1, @Part("address2") RequestBody address2, @Part("device_name") RequestBody device_name, @Part("device_token") RequestBody device_token, @Part("lat") RequestBody lat, @Part("lng") RequestBody lng);