Я создал метод, который отправляет объект на сервер. Если отправка завершается неудачно и переходит в метод onFailure, я хочу вставить объект в базу данных, чтобы попытаться отправить его при наличии соединения.
Когда я вызываю метод один раз, он работает нормально, но когда я делаю несколько вызовов подряд, onFailure всегда содержит последний объект, который я передал ему в качестве параметра, а остальные теряются.
public void sendPerson(final Context ctx, final Person person, final boolean requiresInsert){
WebService.getInstance()
.createService(WebServiceAPI.class)
.sendPersonAPI(person)
.enqueue(new Callback<Person>() {
@Override
public void onResponse(Call<Person> call, Response<Person> response) {
Log.d(TAG, "Post successful - " + response.toString());
if (response.code() != 201 && requiresInsert){
String textForMd5 = new Gson().toJson(person);
handlerDB = new HandlerDB();
handlerDB.insertDB(ctx, person, HashMD5.md5(textForMd5));
}
}
@Override
public void onFailure(Call<Person> call, Throwable t) {
Log.d(TAG, "Post failure - " + Objects.requireNonNull(t.getMessage()));
if (requiresInsert){
String textForMd5 = new Gson().toJson(person);
handlerDB = new HandlerDB();
handlerDB.insertDB(ctx, person, HashMD5.md5(textForMd5));
}
}
});
}
Это интерфейс
public interface WebServiceAPI {
@POST("/person")
Call<Person> sendPersonAPI(@Body Person Person);
}
А вот мой класс WebService
public class WebService {
//private static final String BASE_URL = "http://2905.multimedia-advisor.info:18001";
private static WebService instance;
private Retrofit retrofit;
private HttpLoggingInterceptor httpLoggingInterceptor;
private OkHttpClient.Builder httpClientBuilder;
//Constructor
private WebService(){
//Show the request and response information
httpLoggingInterceptor = new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY);
httpClientBuilder = new OkHttpClient.Builder().addInterceptor(httpLoggingInterceptor);
retrofit = new Retrofit.Builder()
.baseUrl(AppConfig.BASE_URL)
.client(httpClientBuilder.build())
.addConverterFactory(GsonConverterFactory.create())
.build();
}
//La etiqueta syncronized se asegura que solo haya una instancia.
public static synchronized WebService getInstance(){
if (instance == null){
instance = new WebService();
}
return instance;
}
public <S> S createService(Class<S> serviceClass){
return retrofit.create(serviceClass);
}
}