Я использую компоненты 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;
}
}
}
Я надеюсь получить данные из удаленного сервера и обновить локальный сервер!