如何使用AndroidViewModel,LiveData,Retrofit?

时间:2019-04-08 16:41:26

标签: android mvvm retrofit

我正在使用https://developer.android.com/jetpack/docs/guide(arch组件)。我遇到了远程后端(改版)的问题! 装修和房间如何工作?

我已经实现了局部后端(Room)和API类的部分。数据加载成功。

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;
        }


    }
}

我希望已从远程后端检索数据并刷新本地后端!

0 个答案:

没有答案