我的构思是:首先,我将对数据进行的操作都放在一个UserRespository类里面,定义asynctask为内部类,进行查询数据库,并返回查询结果的操作;
其次,在通过函数public User findUser(){}里面,调用定义的asynctaskf类;
然后,其他类可以d通过new一个UserRespository类,去访问gfindUser()方法,获得返回结果;
但是,结果却是,在重写的接口中可以拿到取出来的结果,并赋值给定义的局部变量aUser,但将aUser返回的时候,却是null的。
我想,是不是可能是没等到异步线程执行结束,主线程就往下执行,才出现的这样的情况。
大家帮我看看吧!
package com.example.qiongju_1.Repository;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import com.example.qiongju_1.Dao.UserDao;
import com.example.qiongju_1.Database.MyDatabase;
import com.example.qiongju_1.entity.User;
public class UserRepository {
public User aUser;
private User bUser;
private UserDao userDao;
//声明另一个全局变量,获取用户的状态
public UserRepository(){}
public UserRepository(Context context) {
MyDatabase myDatabase = MyDatabase.getDatabase(context.getApplicationContext());
userDao = myDatabase.getUserDao();
}
//外访问数据库操作接口
public void inserUser(User...users){
new InsertUserAsyncTask(userDao).execute(users[0]);
}
public User findUser(String...strings){
QueryUserAsyncTask queryUserAsyncTask = new QueryUserAsyncTask(userDao);
queryUserAsyncTask.execute(strings);
queryUserAsyncTask.setListener(new QueryUserAsyncTask.OnResponseListener<User>(){
@Override
public void onResponse(User user) {
//回调获得数据
aUser = user;
//aUser这里可以正常被赋值
if (aUser != null){
Log.d("CF","在Repository.fingUser().listener方法里:"+aUser.getUserAccount());
}else{
Log.d("CF","在Repository.fingUser().listener方法里:用户为空");
}
}
});
//aUser在这里就是null的
if (aUser != null){
Log.d("CF","在Repository.fingUser()方法里:"+aUser.getUserAccount());
}else{
Log.d("CF","在Repository.fingUser()方法里:用户为空");
}
return aUser;
}
//单例模式的类要声明static, 后台执行数据库操作
//插入用户
static class InsertUserAsyncTask extends AsyncTask<User,Void,Void> {
private UserDao userDao;
public InsertUserAsyncTask(UserDao userDao) {
this.userDao = userDao;
}
@Override
protected Void doInBackground(User...users) {
userDao.insertUser(users[0]);
return null;
}
}
// 根据账号查找用户
static class QueryUserAsyncTask extends AsyncTask<String,Void,User>{
private UserDao userDao;
public User user;
private OnResponseListener<User> listener;
public QueryUserAsyncTask(UserDao userDao) {
this.userDao = userDao;
}
public void setListener(OnResponseListener<User> listener){
this.listener = listener;
}
@Override
protected User doInBackground(String... strings) {
return userDao.findUserByAccount(strings[0]);
}
@Override
protected void onPostExecute(User user) {
super.onPostExecute(user);
if(listener!=null){
//调用接口方法,返回结果
listener.onResponse(user);
}
}
//接口,类似一个监听事件
public interface OnResponseListener<T>{
void onResponse(T t);
}
}
}
如果在安装OrcaTerm增强功能时遇到SSL证书问题,可以尝试以下操作:
1. 确保你的系统时间和日期设置正确,因为过期的SSL证书可能导致连接问题。
2. 尝试重新下载或更新OrcaTerm增强功能的安装包,确保你使用的是最新版本。开发者有可能更新了证书或修复了与SSL相关的问题。
3. 查看是否有任何防火墙或安全软件阻止了OrcaTerm的访问。临时关闭防火墙或安全软件,然后尝试重新安装增强功能。
4. 手动安装缺失的证书。在操作系统中,找到证书管理器(Certificate Manager)或密钥链管理器(Keychain Manager),导入相应的SSL证书。你可以从官方网站或开发者获取正确的证书。
5. 如果你对证书存在疑问或不确定如何处理,请联系OrcaTerm的支持团队或开发者寻求帮助。他们可以提供专业的指导并解决你的问题。
请注意,这些步骤是一般性的建议,具体操作可能因个人情况而异。
相似问题