Android 计划数据库更新并显示对话框
好的,我想这是一个反复出现的问题,很抱歉。我需要更新我的数据库,从网上收集一些数据,并在下载数据时显示一个对话框。 我有我的对话框,数据很好,并写入数据库。 我正在做一些改进。今天,这项工作从一项活动开始。我的意愿是,所有应用程序都会发生这种情况,并在一段时间后启动。这是问题出现的时刻。 我正在使用AlertManager计划我的操作。我有一个广播接收器,它检查我的数据库并开始从网络上获取数据。在这一点上,我面临着问题。“我的进度”对话框未显示,数据也不完全来自web 来自广播接收器的代码:Android 计划数据库更新并显示对话框,android,database,android-intent,dialog,android-handler,Android,Database,Android Intent,Dialog,Android Handler,好的,我想这是一个反复出现的问题,很抱歉。我需要更新我的数据库,从网上收集一些数据,并在下载数据时显示一个对话框。 我有我的对话框,数据很好,并写入数据库。 我正在做一些改进。今天,这项工作从一项活动开始。我的意愿是,所有应用程序都会发生这种情况,并在一段时间后启动。这是问题出现的时刻。 我正在使用AlertManager计划我的操作。我有一个广播接收器,它检查我的数据库并开始从网络上获取数据。在这一点上,我面临着问题。“我的进度”对话框未显示,数据也不完全来自web 来自广播接收器的代码: i
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.os.Handler;
import android.util.Log;
import android.widget.Toast;
public class SchedulerUpdate extends BroadcastReceiver {
private Handler mHandler = null;
@Override
public void onReceive(Context context, Intent intent) {
try {
mHandler = new Handler();
Log.i("INFO", "SCHEDULED");
if(checkDataBase(context)){
updateData(context);
}
}
catch (Exception e) {
e.printStackTrace();
}
}
private boolean checkDataBase(Context context){
String path = "/data/data/"+context.getPackageName()+"/databases/mdsdacpdatabase.db";
SQLiteDatabase database = null;
boolean result = false;
try{
database = SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.CREATE_IF_NECESSARY);
database.close();
result = true;
}
catch(SQLiteException e){
}
return result;
}
private void updateData(final Context context) {
((Activity)context.getApplicationContext()).showDialog(ID_DIALOG_PROGRESS_DOWNLOAD);
Runnable runnable = new Runnable(){
public void run(){
Log.i("INFO", "RUNNING");
...
mHandler.post(new Runnable() {
public void run() {
((Activity)context).dismissDialog(ID_DIALOG_PROGRESS_DOWNLOAD);
Log.i("INFO", "DONE");
}
});
};
};
new Thread(runnable).start();
}
}
阅读StackOverflow和Kam上的这些帖子:
BroadcastReceiver对象仅在调用期间有效
接收(上下文、意图)。一旦你的代码从这里返回
功能,系统认为对象已完成,不再
活跃的
这对你在工作中能做什么有着重要的影响
onReceive(上下文、意图)实现:任何需要
异步操作不可用,因为您需要
从函数返回以处理异步操作,但在
此时广播接收器不再处于活动状态,因此
系统可以在异步操作之前终止其进程
完成
特别是,您可能不会显示对话框或绑定到来自的服务
在广播接收机中。对于前者,您应该使用
NotificationManager API。对于后者,您可以使用
Context.startService()向服务发送命令
来源:谢谢你的回复。如果我的用户点击通知栏,这个问题就解决了。我的想法是计划意图,并在时间用完时触发它。在这种情况下,代码将仅在用户单击时运行,这不是所需的功能。