Как использовать AndroidViewModel, LiveData, Retrofit? - PullRequest
0 голосов
/ 08 апреля 2019

Я использую компоненты https://developer.android.com/jetpack/docs/guide(arch). Я столкнулся с проблемой с удаленным бэкэндом (Retrofit)! Как работает Retrofit and Room?

Я уже реализовал часть для локального бэкэнда (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;
        }


    }
}

Я надеюсь получить данные из удаленного сервера и обновить локальный сервер!

...