Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:异步填充后从数据库加载listview_Java_Android_Listview_Asynchronous - Fatal编程技术网

Java Android:异步填充后从数据库加载listview

Java Android:异步填充后从数据库加载listview,java,android,listview,asynchronous,Java,Android,Listview,Asynchronous,我试图显示一个进度对话框,同时从填充sqlite数据库的web加载信息,从中创建Listview。我创建了一个异步类,该类在下载信息时显示一个进度对话框,但之后listview为空。这可能是因为listview在异步之前已经加载。那么,如何重新加载listview或以正确的方式执行此操作?以下是我到目前为止所做的(由于太长而无法显示,因此忽略了后台处理): 私有类下载信息扩展异步任务{ //////////////////执行前打开对话框/////////// 私人对话; 受保护的void on

我试图显示一个进度对话框,同时从填充sqlite数据库的web加载信息,从中创建Listview。我创建了一个异步类,该类在下载信息时显示一个进度对话框,但之后listview为空。这可能是因为listview在异步之前已经加载。那么,如何重新加载listview或以正确的方式执行此操作?以下是我到目前为止所做的(由于太长而无法显示,因此忽略了后台处理):

私有类下载信息扩展异步任务{
//////////////////执行前打开对话框///////////
私人对话;
受保护的void onPreExecute(){
dialog=新建ProgressDialog(CandidatesList.this);
setMessage(“从Web服务器加载候选者”);
对话框。setUndeterminate(true);
对话框。可设置可取消(false);
dialog.show();
}
///////////////背景处理//////////////////
@凌驾
受保护的无效doInBackground(无效…dbArray){
////从Web服务器加载信息并将其放入sqlite///
返回null;
}
///////处理完成后//////////////
受保护的void onPostExecute(未使用的void){
dialog.dismise();
}
}
创建时的操作如下所示:

DownloadInfo task = new DownloadInfo();
    task.execute();
Cursor c = db.getAllCandidates();
    candidates = new String[c.getCount()];
    if (c.moveToFirst()) {
        int i = 0;
        do {
            candidates[i] = c.getString(1);// insert Name into candidate
                                            // Array
            i++;
        } while (c.moveToNext());
    }
    setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item,
            candidates));
DownloadInfo任务=新建DownloadInfo();
task.execute();
游标c=db.getAllCandidates();
候选项=新字符串[c.getCount()];
if(c.moveToFirst()){
int i=0;
做{
候选项[i]=c.getString(1);//在候选项中插入名称
//排列
i++;
}而(c.moveToNext());
}
setListAdapter(新阵列适配器)(此,R.layout.list_项,
候选人),;
请帮忙, 谢谢

如果要将光标信息从数据库自动加载到ListView中,请为ListView使用。(异步完成后,您可能需要调用notifyDataSetChanged()。

在postExecute中调用notifyDataSetChanged()?关于什么?notifyDataSetChanged()是SimpleCursorAdapter的继承方法。一种解决方案是将AsyncTask传递给适配器,是的,在postExecute()中调用notifyDataSetChanged()。
DownloadInfo task = new DownloadInfo();
    task.execute();
Cursor c = db.getAllCandidates();
    candidates = new String[c.getCount()];
    if (c.moveToFirst()) {
        int i = 0;
        do {
            candidates[i] = c.getString(1);// insert Name into candidate
                                            // Array
            i++;
        } while (c.moveToNext());
    }
    setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item,
            candidates));