I am using the developer.android.com/jetpack/docs/guide(arch components).I accross a problem with the remote backend(Retrofit)! How to work Retrofit and Room?
I have already implement the part for the loacal backend(Room) and the API class.Loading the data is successful.
public interface UserService { @FormUrlEncoded @POST("insert.php") Call<User> createUser(@Field("name") String nom, @Field("username") String username, @Field("email") String email, @Field("mdp") String mdp, @Field("role") String role); @GET("login.php") Call<User> getUserRemote(@Query("email") String email, @Query("mdp") String mdp); }
public class UserRepository { private UserDao userDao; private LiveData<List<User>> allusers; LiveData<User> user; final MutableLiveData<User> data = new MutableLiveData<>(); private UserService service;
public UserRepository(Application app) {
Database_Project database= Database_Project.getInstance(app);
userDao=database.userDao();
allusers=userDao.getUsers();
service=Webprovide.getClient().create(UserService.class);
}
public void insert(User user)
{
new Insert_Asyntask(userDao).execute(user);
}
public void insertS(String name, String username,String email, String mdp, String role)
{
User user=new User(nom,username,email,mdp,role);
user.setNom(nom);
user.setUsername(username);
user.setRole(role);
user.setEmail(email);
user.setMdp(mdp);
Call<User> call=service.createUser(user.getNom(),user.getUsername(),user.getEmail(),user.getMdp(),user.getRole());
Log.d("user", "insertS: "+call.request());
call.enqueue(new Callback<User>() {
@Override
public void onResponse(Call<User> call, Response<User> response) {
Log.d("user", "insertS: "+call);
Log.d("Response", "onResponse: "+response.body());
data.setValue(response.body());
Log.d("role", "insertS: "+response.body().getRole());
}
@Override
public void onFailure(Call<User> call, Throwable t) {
Log.d("Onfaillue", "onFailure: "+t.getLocalizedMessage() );
Log.d("getmessage", "onFailure: "+t.getMessage());
Log.d("Userservieces", "onFailure: "+service.toString());
Log.d("on", "onFailure: ");
}
});
}
public void update(User user)
{
new Update_Asyntask(userDao).execute(user);
}
public void delete(User user)
{
new Delete_Asyntask(userDao).execute(user);
}
public LiveData<User> findMaterialsBorrowedByUser(int fk)
{
return userDao.findMaterialsBorrowedByUser(fk);
}
public LiveData<List<User>> getAllusers(){
return allusers;
}
public LiveData<User> getUser( final String email,final String mdp) {
Call<User> callUser=service.getUserRemote(email,mdp);
callUser.enqueue(new Callback<User>() {
@Override
public void onResponse(Call<User> call, Response<User> response) {
Log.d(TAG, "onResponse: "+response.code());
if(response.isSuccessful())
{
data.setValue(response.body());
user=data;
}
}
@Override
public void onFailure(Call<User> call, Throwable t) {
Log.d(TAG, "onFailure: "+t.getMessage());
data.setValue(null);
}
});
user=userDao.getUser(email,mdp);
return user;
}
private static class Insert_Asyntask extends AsyncTask<User, Void, Void>
{
public Insert_Asyntask(UserDao userdao) {
this.userdao = userdao;
}
private UserDao userdao;
@Override
protected Void doInBackground(User... users) {
userdao.insert(users[0]);
return null;
}
}
private static class Update_Asyntask extends AsyncTask<User, Void, Void>
{
public Update_Asyntask(UserDao userdao) {
this.userdao = userdao;
}
private UserDao userdao;
@Override
protected Void doInBackground(User... users) {
userdao.update(users[0]);
return null;
}
}
private static class Delete_Asyntask extends AsyncTask<User, Void, Void>
{
public Delete_Asyntask(UserDao userdao) {
this.userdao = userdao;
}
private UserDao userdao;
@Override
protected Void doInBackground(User... users) {
userdao.delete(users[0]);
return null;
}
}
}
i have this error from the logcat: Attempt to invoke virtual method 'void android.arch.lifecycle.LiveData.observe(android.arch.lifecycle.LifecycleOwner, android.arch.lifecycle.Observer)' on a null object reference.
I espect to have retrieve the data from the remote backend and refresh the local backend!
Thanks!
No responses yet.