Вы почти достигли решения.Но вы допустили небольшую ошибку при передаче параметров в запрос API.
Как видно из скриншота приложения Insomia, этот API требует JSONArray в качестве параметра, но вы отправляете JSONObject.
Пример параметра JSON
[
{
"SerialNumber" : "1234",
"Coordinate1" : "12.7845874",
"Coordinate2" : "76.4584578",
"DateTime" : "2018-11-14 08:45:00",
"Speed" : "0",
"Port" : 9090
}
]
В соответствии с приведенной выше структурой JSON вам необходимо изменить класс Api.java
на что-то вроде этого:
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.POST;
import java.util.List; // add import
public interface Api {
@POST("/api/Database/NewLocation")
Call < MapDetails > mapDetailLocation(@Body List<MapDetails> mapDetails);
// ^^^^ changes here
@POST("/api/Registration/RegisterDevice")
Call < RegisterDetails > registerDetails(@Body RegisterDetails registerAllDetails);
}
Добавить List<MapDetails>
к mapDetailLocation()
методупараметр.
А в операции или фрагменте используйте вышеуказанный метод следующим образом:
//......
// part of the code
MapDetails mapDetails = new MapDetails("1807200005", lat, lon, currentDateTimeString, "0", 9090);
List<MapDetails> data = new ArrayList<>();
data.add(mapDetails);
Retrofit.Builder builder = new Retrofit.Builder()
.baseUrl("<BASE_URL>") // change base URL
.addConverterFactory(GsonConverterFactory.create());
Retrofit retrofit = builder.build();
Api locate = retrofit.create(Api.class);
Call<MapDetails> call = locate.mapDetailLocation(data); // NOTICE THE CHANGES IN PARAMETER
call.enqueue(new Callback<MapDetails>() {
@Override
public void onResponse(Call<MapDetails> call, Response<MapDetails> response) {
// do whatever you want
}
@Override
public void onFailure(Call call, Throwable t) {
// log the error message
}
});
Примечание. Пожалуйста, измените базовый URL в соответствии с вашими требованиями.
Редактировать:
Изменить параметры метода в Activity с MapDetails
на List<MapDetails>
// prepare data
MapDetails data = new MapDetails("1807200005", lat, lon, currentDateTimeString, "0", 9090);
// add it to ArrayList
List<MapDetails> mapDetails = new ArrayList<>();
mapDetails.add(data);
// pass it as an argument
private void setLocation(List<MapDetails> mapDetails) {
initializeRetrofit(mapDetails);
}
Изменить параметр метода в initializeRetrofit()
private void initializeRetrofit(List<MapDetails> mapDetails) {
Retrofit.Builder builder = new Retrofit.Builder()
.baseUrl("<BASE_URL>") // change base URL
.addConverterFactory(GsonConverterFactory.create());
Retrofit retrofit = builder.build();
Api locate = retrofit.create(Api.class);
SetMapLocationApiCaller(locate, mapDetails);
}
Снова изменить методпараметр
private void SetMapLocationApiCaller(Api locate, List<MapDetails> mapDetails) {
Call<MapDetails> call = locate.mapDetailLocation(mapDetails);
executeCallAsynchronously(call);
}