Я пытаюсь создать систему, в которую я могу загружать информацию профиля, такую как имя, адрес электронной почты, пароль и изображение профиля, где пользователь может выбрать изображение из галереи или камеры. Я пытаюсь использовать Retrofit с сервером PHP и базой данных MySQL.
Проблема в том, что мой код работает только с изображениями или только текстом (имя, адрес электронной почты, пароль), я не могу заставить его работать с обоими:
Вот мой код: Класс интерфейса
@POST("addProfile.php")
@FormUrlEncoded
Call<ServerResponse> addProfile(
@Field("name") String name,
@Field("email") String email,
@Field("password") String password,
@Field("picTitle") String picTitle,
@Part MultipartBody.Part picFile
);
Класс AppConfig:
public static Retrofit retrofit = null;
public static Retrofit getClient() {
if (retrofit == null) {
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}
метод uploadToPHPServer:
private void uploadToServer(String name, String email, String password,String picTitle) {
File file = new File(postPath);
RequestBody requestBody = RequestBody.create(
MediaType.parse("*/*")
, file);
MultipartBody.Part fileToSend = MultipartBody.Part.createFormData("picPath", file.getName(), requestBody);
//picTitle = file.getName();
//making api call
ApiConfig api = AppConfig.getClient().create(ApiConfig.class);
Call<ServerResponse> addingProfile = api.addProfile(name, email, password, picTitle, fileToSend);
addingProfile.enqueue(new Callback<ServerResponse>() {
@Override
public void onResponse(Call<ServerResponse> call, Response<ServerResponse> response) {
if(response.isSuccessful()){
Toast.makeText(CaptureDetails.this,"Profile upload successful.", Toast.LENGTH_LONG).show();
}else{
Toast.makeText(CaptureDetails.this,response.body().getMessage(),Toast.LENGTH_LONG).show();
}
}
@Override
public void onFailure(Call<ServerResponse> call, Throwable t) {
Toast.makeText(CaptureDetails.this,t.getLocalizedMessage(),Toast.LENGTH_SHORT).show();
}
});
}
При попытке загрузить я получаю следующую ошибку:
2019-03-26 16:58:21.929 11828-11828/zw.co.vokers.vinceg.vokers E/AndroidRuntime: FATAL EXCEPTION: main
Process: zw.co.vokers.vinceg.vokers, PID: 11828
java.lang.IllegalArgumentException: @Part parameters can only be used with multipart encoding. (parameter #7)
for method ApiConfig.addEntry
at retrofit2.ServiceMethod$Builder.methodError(ServiceMethod.java:752)
at retrofit2.ServiceMethod$Builder.methodError(ServiceMethod.java:743)
at retrofit2.ServiceMethod$Builder.parameterError(ServiceMethod.java:761)
at retrofit2.ServiceMethod$Builder.parseParameterAnnotation(ServiceMethod.java:592)
at retrofit2.ServiceMethod$Builder.parseParameter(ServiceMethod.java:336)
at retrofit2.ServiceMethod$Builder.build(ServiceMethod.java:204)
at retrofit2.Retrofit.loadServiceMethod(Retrofit.java:170)
at retrofit2.Retrofit$1.invoke(Retrofit.java:147)
at java.lang.reflect.Proxy.invoke(Proxy.java:913)
at $Proxy0.addEntry(Unknown Source)
at zw.co.vokers.vinceg.vokers.activities.CaptureDetails.uploadToServer(CaptureDetails.java:578)
at zw.co.vokers.vinceg.vokers.activities.CaptureDetails.access$400(CaptureDetails.java:78)
at zw.co.vokers.vinceg.vokers.activities.CaptureDetails$1.onClick(CaptureDetails.java:189)
at android.view.View.performClick(View.java:6294)
at android.view.View$PerformClick.run(View.java:24770)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
Я получаю часть @Part parameters can only be used with multipart encoding.
, но если я пытаюсь изменить это, я добавляю аннотацию @MultiPart к классу Interface, это выдает мне ошибку, обратную.
Я следовал учебнику здесь и здесь , когда застрял ... Кажется, я не могу найти учебник или подобный вопрос по стеку.
Любая помощь или направление предлагается с благодарностью. Заранее спасибо