在我的应用程序中,我使用Room库来读取/写入值。在一个活动中,我正从我的SQLite数据库中读取一个值,我需要将该值传递给下一个活动。仅仅因为我们无法读取主线程中的值,我使用的是另一个线程。当我尝试将这些值放在线程外的intent.putExtra
时,它会给我Nullpointerexception
。但是如果我把intent
放在线程中,一切似乎都没问题。我想知道是否可以将我的意图放在线程中?这是正确的方法吗?我需要使用AsyncTask吗?
Runnable r = new Runnable(){
@Override
public void run() {
List<Vehicle> list = dDb.vehicleDao().getAll();
for (Vehicle s : list) {
vehicleNumber = s.getVehicleNo();
vehicleDescrp = s.getDescription();
}
// Session manager
session = new SessionManager(getApplicationContext());
// Check if user is already logged in or not
if (session.isLoggedIn()) {
// Launch main activity
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
intent.putExtra("VEHICLEID", vehicleNumber);
intent.putExtra("VEHICLEDS", vehicleDescrp);
startActivity(intent);
finish();
}
}
};
Thread newThread= new Thread(r);
newThread.start();
答案 0 :(得分:0)
这是行不通的,因为你无法在Actvity
之外打开Main Thread
。
如果你真的需要它,你必须用
包装它runOnUiThread(new Runnable() {
void run() {
// Do stuff…
}
});
所以在你的情况下,它看起来像
Runnable r = new Runnable(){
@Override
public void run() {
List<Vehicle> list = dDb.vehicleDao().getAll();
for (Vehicle s : list) {
vehicleNumber = s.getVehicleNo();
vehicleDescrp = s.getDescription();
}
// Session manager
session = new SessionManager(getApplicationContext());
// Check if user is already logged in or not
if (session.isLoggedIn()) {
LoginActivity.this.runOnUiThread(new Runnable() {
void run() {
// Launch main activity
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
intent.putExtra("VEHICLEID", vehicleNumber);
intent.putExtra("VEHICLEDS", vehicleDescrp);
startActivity(intent);
finish();
}
};
Thread newThread= new Thread(r);
newThread.start();