Anonymous
Данные JSON не были полностью использованы
Сообщение
Anonymous » 16 июл 2024, 14:40
При отправке изображения с использованием multipart с использованием библиотеки модификации возникает эта ошибка.
Я проверил множество решений, доступных в Stack Overflow, но ни одно из них мне не помогло. >
Здесь я предоставляю вам свой код:
Код: Выделить всё
public class ApiHandler {
private static final String BASE_URL = "https://aaplasevak.com/";
private static Retrofit retrofit;
public static Retrofit getRetrofitInstance() {
if(retrofit == null){
OkHttpClient client = new OkHttpClient.Builder().build();
Gson gson = new GsonBuilder().setLenient().create();
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.client(client)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
}
return retrofit;
}
}
Мой класс интерфейса API
Код: Выделить всё
@Multipart
@POST("whatsapp_api.php")
Call sentWhatsAppMessage(
@Part("series_id") RequestBody seriesId,
@Part("colony_id") RequestBody colonyId,
@Part("row_id") RequestBody rowId,
@Part("watersupply_id") RequestBody waterSupplyId,
@Part("constituency") RequestBody constituency,
@Part("city_village") RequestBody cityVillage,
@Part("zone") RequestBody zone,
@Part("prabhag_ward") RequestBody prabhagWard,
@Part("template_desc") RequestBody templateDesc,
@Part MultipartBody.Part file
);
Код реализации API
Код: Выделить всё
private void sentWhatsAppMessage() {
ApiInterface apiInterface = getRetrofitInstance().create(ApiInterface.class);
RequestBody seriesId = RequestBody.create(MediaType.parse("multipart/form-data"), String.valueOf(spinner_series.getSelectedItemPosition()));
RequestBody colonyId = RequestBody.create(MediaType.parse("multipart/form-data"), String.valueOf(spinner_colony.getSelectedItemPosition() + 1));
RequestBody rowId = RequestBody.create(MediaType.parse("multipart/form-data"), String.valueOf(spinner_row.getSelectedItemPosition() + 1));
RequestBody waterSupplyId = RequestBody.create(MediaType.parse("multipart/form-data"), String.valueOf(spinner_water_Supply.getSelectedItemPosition()));
RequestBody zoneId = RequestBody.create(MediaType.parse("multipart/form-data"), String.valueOf(spinner_zone.getSelectedItemPosition()));
RequestBody wardId = RequestBody.create(MediaType.parse("multipart/form-data"), String.valueOf(spinner_ward.getSelectedItemPosition()));
RequestBody constituencyId = RequestBody.create(MediaType.parse("multipart/form-data"), String.valueOf(spinner_constituency.getSelectedItemPosition()));
RequestBody cityVillageId = RequestBody.create(MediaType.parse("multipart/form-data"), String.valueOf(spinner_city_village.getSelectedItemPosition()));
RequestBody message = RequestBody.create(MediaType.parse("multipart/form-data"), etMessage.getText().toString());
File file = new File(getRealPathFromURI(selectedUri));
RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);
MultipartBody.Part body = MultipartBody.Part.createFormData("file", file.getName(), requestFile);
Call call = apiInterface.sentWhatsAppMessage(seriesId,colonyId,rowId,waterSupplyId,constituencyId,cityVillageId,zoneId,wardId,message,body);
//Log.d("Api Response", "WhatsApp: " + whatsAppApiBody.toString());
call.enqueue(new Callback() {
@Override
public void onResponse(Call call, retrofit2.Response response) {
if (response.isSuccessful()) {
WhatsAppApiResponseData responseData = response.body();
String status = responseData.toString();
Toast.makeText(WhatsappActivity.this, "Success!! " + status, Toast.LENGTH_SHORT).show();
Log.d("Api Response","data: " + status);
finish();
} else {
Toast.makeText(WhatsappActivity.this, "Response Error..!!", Toast.LENGTH_SHORT).show();
Log.e("Api Response", "Response Error..");
}
}
@Override
public void onFailure(Call call, Throwable throwable) {
Log.e("Api Response", "Error.." + throwable.getLocalizedMessage());
Toast.makeText(WhatsappActivity.this, "Error.." + throwable.getLocalizedMessage(), Toast.LENGTH_SHORT).show();
throwable.printStackTrace();
}
});
}
функция getRealPathFromUri
Код: Выделить всё
private String getRealPathFromURI(Uri contentUri) {
String[] projection = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(contentUri, projection, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String filePath = cursor.getString(column_index);
cursor.close();
return filePath;
}
При тестировании с помощью API Postman все работает нормально, но здесь я сталкиваюсь с проблемой, которая всегда отображается:
Данные Json не были использованы полностью
Подробнее здесь:
https://stackoverflow.com/questions/787 ... y-consumed
1721130014
Anonymous
При отправке изображения с использованием multipart с использованием библиотеки модификации возникает эта ошибка. Я проверил множество решений, доступных в Stack Overflow, но ни одно из них мне не помогло. > Здесь я предоставляю вам свой код: [code]public class ApiHandler { private static final String BASE_URL = "https://aaplasevak.com/"; private static Retrofit retrofit; public static Retrofit getRetrofitInstance() { if(retrofit == null){ OkHttpClient client = new OkHttpClient.Builder().build(); Gson gson = new GsonBuilder().setLenient().create(); retrofit = new Retrofit.Builder() .baseUrl(BASE_URL) .client(client) .addConverterFactory(GsonConverterFactory.create(gson)) .build(); } return retrofit; } } [/code] [b]Мой класс интерфейса API[/b] [code] @Multipart @POST("whatsapp_api.php") Call sentWhatsAppMessage( @Part("series_id") RequestBody seriesId, @Part("colony_id") RequestBody colonyId, @Part("row_id") RequestBody rowId, @Part("watersupply_id") RequestBody waterSupplyId, @Part("constituency") RequestBody constituency, @Part("city_village") RequestBody cityVillage, @Part("zone") RequestBody zone, @Part("prabhag_ward") RequestBody prabhagWard, @Part("template_desc") RequestBody templateDesc, @Part MultipartBody.Part file ); [/code] [b]Код реализации API[/b] [code] private void sentWhatsAppMessage() { ApiInterface apiInterface = getRetrofitInstance().create(ApiInterface.class); RequestBody seriesId = RequestBody.create(MediaType.parse("multipart/form-data"), String.valueOf(spinner_series.getSelectedItemPosition())); RequestBody colonyId = RequestBody.create(MediaType.parse("multipart/form-data"), String.valueOf(spinner_colony.getSelectedItemPosition() + 1)); RequestBody rowId = RequestBody.create(MediaType.parse("multipart/form-data"), String.valueOf(spinner_row.getSelectedItemPosition() + 1)); RequestBody waterSupplyId = RequestBody.create(MediaType.parse("multipart/form-data"), String.valueOf(spinner_water_Supply.getSelectedItemPosition())); RequestBody zoneId = RequestBody.create(MediaType.parse("multipart/form-data"), String.valueOf(spinner_zone.getSelectedItemPosition())); RequestBody wardId = RequestBody.create(MediaType.parse("multipart/form-data"), String.valueOf(spinner_ward.getSelectedItemPosition())); RequestBody constituencyId = RequestBody.create(MediaType.parse("multipart/form-data"), String.valueOf(spinner_constituency.getSelectedItemPosition())); RequestBody cityVillageId = RequestBody.create(MediaType.parse("multipart/form-data"), String.valueOf(spinner_city_village.getSelectedItemPosition())); RequestBody message = RequestBody.create(MediaType.parse("multipart/form-data"), etMessage.getText().toString()); File file = new File(getRealPathFromURI(selectedUri)); RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file); MultipartBody.Part body = MultipartBody.Part.createFormData("file", file.getName(), requestFile); Call call = apiInterface.sentWhatsAppMessage(seriesId,colonyId,rowId,waterSupplyId,constituencyId,cityVillageId,zoneId,wardId,message,body); //Log.d("Api Response", "WhatsApp: " + whatsAppApiBody.toString()); call.enqueue(new Callback() { @Override public void onResponse(Call call, retrofit2.Response response) { if (response.isSuccessful()) { WhatsAppApiResponseData responseData = response.body(); String status = responseData.toString(); Toast.makeText(WhatsappActivity.this, "Success!! " + status, Toast.LENGTH_SHORT).show(); Log.d("Api Response","data: " + status); finish(); } else { Toast.makeText(WhatsappActivity.this, "Response Error..!!", Toast.LENGTH_SHORT).show(); Log.e("Api Response", "Response Error.."); } } @Override public void onFailure(Call call, Throwable throwable) { Log.e("Api Response", "Error.." + throwable.getLocalizedMessage()); Toast.makeText(WhatsappActivity.this, "Error.." + throwable.getLocalizedMessage(), Toast.LENGTH_SHORT).show(); throwable.printStackTrace(); } }); } [/code] [b]функция getRealPathFromUri[/b] [code] private String getRealPathFromURI(Uri contentUri) { String[] projection = {MediaStore.Images.Media.DATA}; Cursor cursor = getContentResolver().query(contentUri, projection, null, null, null); int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); String filePath = cursor.getString(column_index); cursor.close(); return filePath; } [/code] При тестировании с помощью API Postman все работает нормально, но здесь я сталкиваюсь с проблемой, которая всегда отображается: [b]Данные Json не были использованы полностью[/b] Подробнее здесь: [url]https://stackoverflow.com/questions/78753678/json-data-was-not-fully-consumed[/url]