【发布时间】:2018-07-13 08:44:50
【问题描述】:
我正在尝试创建一个登录功能,该功能将检查用户名是否存在于 db:-
我需要成功地从 Room 数据库获取实时数据到 Repository 到 view-model。下面是代码。它不起作用,但会尝试其中一个建议。
当我从 DB 行加载时:-
UserDetails= dao.loadUserDetails(UserName);
Log.v("Response", UserDetails.getValue().getToken());
我无法调用 Null .....
我对实现这样一个功能的最佳方法以及如何解决这个问题感到困惑。
存储库
public MutableLiveData<String> LoginUser(String UserName,String Password ) {
//
// rUserDetails.setUsername("nadeem");
// rUserDetails.setPassword("test");
// rUserDetails.setToken(AppConstants.PARAMS);
// rUserDetails.setSid("1234");
// rUserDetails.setResourcId(Long.valueOf(12134));
// insert(rUserDetails);
UserDetails= dao.loadUserDetails(UserName);
Log.v("Response", UserDetails.getValue().getToken());
if(UserDetails.getValue()!=null) {
rUserDetails.setUsername(UserName);
rUserDetails.setPassword(Password);
rUserDetails.setToken(AppConstants.PARAMS);
Observable<MainResponse> mainResponseObserver = mtsAPI.GetSessionID("token/login", AppConstants.PARAMS + "");
mainResponseObserver.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<MainResponse>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(MainResponse mainResponse) {
Log.v("Response", mainResponse.getEid());
if (mainResponse.getEid()==null) {
msessionId.postValue("Token Error");
}
else {
msessionId.postValue("1");
rUserDetails.setSid(mainResponse.getEid());
rUserDetails.setResourcId(mainResponse.getUserVO().getBact());
insert(rUserDetails);
}
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
else {
msessionId.postValue("E");
}
return msessionId;
}
我被困在检查用户数据是否在 Room DB 中的部分。如果在房间数据库中,它会返回 UserDetails,这是一个可变的实时数据。
我已经测试了数据库。当我分别测试它们时,它成功插入并成功读取。
道
@Dao
public interface UserLoginDetailsDao {
@Insert(onConflict = REPLACE)
void save(UserLoginDetails user);
@Query("SELECT sid, Username, Password,ResourcId,Token FROM
UserLogins_tbl
WHERE Username = :userId")
LiveData<UserLoginDetails> loadUserDetails(String userId);
}
使用上面的代码,我无法在 UserDetails.getvalue.getToken 上调用 Null....
【问题讨论】:
标签: java android sqlite android-room android-livedata