Los datos se muestra en la base de datos de habitación, incluso después de borra de servidor

digvijay:

Estoy búsqueda de datos del servidor de base de datos y el ahorro en la habitación y luego de habitación mostrándolo en reciclador view.Data está perfectamente ahorro de la base de datos habitación y mostrando a la vista de reciclaje.

Problema: Cuando estoy suprimiendo algunos datos de la base de datos del servidor entonces su copia de edad que salvó antes aún persiste en la habitación.

Lo que yo quiero: No quiero para mostrar los datos borrados del servidor en el reciclador view.So ¿cómo puedo actualizar la base de datos habitación basándose en la respuesta del servidor.

Esto es lo que he hecho hasta ahora:

UserDao.java

@Dao
public interface UserDao {

@Insert(onConflict = OnConflictStrategy.REPLACE)
void Insert(User... users);

@Query("SELECT * FROM Users")
LiveData<List<User>> getRoomUsers();
}

User.java

@Entity(tableName = "Users")
public class User {

@NonNull
@PrimaryKey
private String id;

@ColumnInfo(name = "name")
@SerializedName("name")
@Expose
private String name;

@ColumnInfo(name = "age")
@SerializedName("age")
@Expose
private String age;

public User(String id,String name, String age) {
   this.id = id;
   this.name = name;
   this.age = age;
}

public String getId() {
   return id;
}

public void setId(String id) {
   this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
   this.name = name;
}

public String getAge() {
   return age;
}

public void setAge(String age) {
   this.age = age;
}
}

UserRepository.java

public class UserRepository {

private Context context;
private UserDb userDb;
private LiveData<List<User>> listLiveData;

public UserRepository(Context context) {
   this.context = context;
   userDb = UserDb.getInstance(context);
   listLiveData = userDb.userDao().getRoomUsers();
}

public void getUserList(){

      Retrofit retrofit = RetrofitClient.getInstance();
      ApiService apiService = retrofit.create(ApiService.class);

      Call<List<User>> userList = apiService.getUser();

      userList.enqueue(new Callback<List<User>>() {
          @Override
          public void onResponse(Call<List<User>> call, final Response<List<User>> response) {

              Completable.fromAction(new Action() {
                      @Override
                      public void run() throws Exception {

                          if(response.body() != null) {

                              List<User> list = response.body();

                              for (int i = 0; i < list.size(); i++) {

                                  String id = list.get(i).getId();
                                  String names = list.get(i).getName();
                                  String age = list.get(i).getAge();

                                  User user = new User(id,names,age);

                                  userDb.userDao().Insert(user);


                              }

                          }

                      }
                  }).subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(new CompletableObserver() {
                        @Override
                        public void onSubscribe(Disposable d) {

                        }

                        @Override
                        public void onComplete() {

                            Toast.makeText(context,"Data inserted",Toast.LENGTH_SHORT).show();
                        }

                        @Override
                        public void onError(Throwable e) {

                            Toast.makeText(context,e.getMessage(),Toast.LENGTH_SHORT).show();
                        }
                    });


          }

          @Override
          public void onFailure(Call<List<User>> call, Throwable t) {
              Toast.makeText(context,t.getMessage(),Toast.LENGTH_LONG).show();
          }
      });

 }

public LiveData<List<User>> getRoomUsers(){

   return listLiveData;
  }
}

MainActivity.java

public class MainActivity extends AppCompatActivity {

UserRepository userRepository;
RecyclerView recyclerView;
UserViewModel userModel;
List<User> userList;
UserAdapter adapter;
ProgressBar prg;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

prg = findViewById(R.id.prg);

userRepository = new UserRepository(this);
userModel = ViewModelProviders.of(this).get(UserViewModel.class);

recyclerView = findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));

userList = new ArrayList<>();

adapter = new UserAdapter(userList,this);
recyclerView.setAdapter(adapter);

userModel.getListLiveData().observe(this, new Observer<List<User>>() {

    @Override
    public void onChanged(List<User> users) {

        prg.setVisibility(View.INVISIBLE);
        adapter.setUserList(users);
    }
});

FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent i = new Intent(MainActivity.this,AddUser.class);
        startActivity(i);
    }
});



   userRepository.getUserList();
}

Por favor alguien que me haga saber consecuencia ¿cómo puedo deseada. Cualquier ayuda sería apreciada.

GRACIAS

Amin mahmoudi:

puede eliminar la tabla antes de insertar nuevos datos para lograr que utilizar a continuación código:

@Dao
public abstract UserDao {

 @Insert(onConflict = OnConflictStrategy.REPLACE)
 abstract void Insert(User... users);

 @Query("SELECT * FROM Users")
 abstract LiveData<List<User>> getRoomUsers();

 @Insert(onConflict = OnConflictStrategy.IGNORE)
 abstract void insert( List<Users> list);

 @Query("DELETE FROM Users")
 abstract void deleteAll();

 @Transaction
 void deleteAndInsert(List<Users> list){
   deleteAll();
   insert(list);
 }

}

Ahora puede utilizar userDb.deleteAndInsert(list)el método después de List<User> list = response.body();que los datos de sincronización con el servidor.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=230136&siteId=1
Recomendado
Clasificación