Я использую Retrofit2, я отправлял данные через него, используя @FormUrlEncoded, потому что все было в виде строки, даже изображения, но я столкнулся с некоторыми ошибками, когда я отправляю коллекцию изображений в виде строк, поэтому я изменяю на multipart.
Теперь я столкнулся с проблемой, что я не могу отправить @Field of string с multipart.
Итак, как я могу решить эту проблему, не используя RequestBody для каждой строки?
вот мой код
@Multipart
@POST("/androidfiles/insertNews.php")
Call<ResponseBody> uploadImage(@Part MultipartBody.Part file, @Part("name") RequestBody name,
@Field("tArabic") String arabicTitle,
@Field("tEnglish") String englishTitle,
@Field("tRussian") String russianTitle,
@Field("tItalian") String italianTitle,
@Field("dArabic") String arabicDescription,
@Field("dEnglish") String englishDescription,
@Field("dRussian") String russianDescription,
@Field("dItalian") String italianDescription);
и здесь.
private void insertNews(Uri uri){
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(ServiceConstants.URL)
.build();
File file = FileUtil.getFile(this, uri);
RequestBody mFile = RequestBody.create(MediaType.parse("image/*"), file);
MultipartBody.Part fileToUpload = MultipartBody.Part.createFormData("file", file.getName(), mFile);
RequestBody filename = RequestBody.create(MediaType.parse("text/plain"), file.getName());
ApiConfig apiConfig = retrofit.create(ApiConfig.class);
Call<ResponseBody> addNews = apiConfig.uploadImage(fileToUpload,
filename,
etArabicTitle.getText().toString(),
etEnglishTitle.getText().toString(),
etRussianTitle.getText().toString(),
etItalianTitle.getText().toString(),
etArabicDescription.getText().toString(),
etEnglishDescription.getText().toString(),
etRussianDescription.getText().toString(),
etItalianDescription.getText().toString());
addNews.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
Toast.makeText(News.this, "success" + "\n" + response.message(), Toast.LENGTH_SHORT).show();
Intent intent = new Intent(News.this,Menu.class);
startActivity(intent);
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
Toast.makeText(News.this, "fail" + t.getMessage(), Toast.LENGTH_SHORT).show();
t.printStackTrace();
}
});
}