Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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
Android 使用进度条的结果是不填充列表视图_Android_Multithreading_Progress Bar_Android Listview - Fatal编程技术网

Android 使用进度条的结果是不填充列表视图

Android 使用进度条的结果是不填充列表视图,android,multithreading,progress-bar,android-listview,Android,Multithreading,Progress Bar,Android Listview,我在安卓系统中使用了一个进度条,所以在我的数据加载之前,用户会得到一个关于正在发生的事情的适当反馈。 条形图的代码如下所示: final ProgressDialog myProgressDialog; myProgressDialog = ProgressDialog.show(ListingPage.this,"Please Wait", "Loading Date", true); new Thread() { public void run() { try{

我在安卓系统中使用了一个进度条,所以在我的数据加载之前,用户会得到一个关于正在发生的事情的适当反馈。 条形图的代码如下所示:

final ProgressDialog myProgressDialog;

myProgressDialog = ProgressDialog.show(ListingPage.this,"Please Wait", "Loading Date", true);
new Thread() {
   public void run() {
      try{
         setSelected();                     
         sleep(5000);
      } catch (Exception e) { }
      myProgressDialog.dismiss();
   }
}.start();
setSelected()方法将数据插入数组列表,然后创建数组适配器,然后使用列表视图显示这些项

因此,当我将setSelected()方法放在进度条中时,它会显示加载循环,但一旦加载完成。listview中不显示任何内容。但是如果我取出进度条形码(thread and run方法),并简单地调用setSelected()方法,listview就会成功地声明数据。
到目前为止,它的结论是,进度条码正在做一些事情…所以我想知道我是否缺少一些东西来添加或删除代码。我需要显示进度条,因为我正在从在线源读取数据,这需要时间,这可能会让用户感到不舒服。

问题可能是您试图从另一个线程更改用户界面,然后是UI线程,这在Android中是不可能的

我建议试着使用一种新的方法。Asynct任务使您可以在后台线程中执行某些操作,并在完成后在UI线程中发布结果

为此,我将setSelected方法分为两种方法:一种是获取数据并创建数组和其他所有内容,另一种是创建适配器并将结果发布到列表

myProgressDialog = ProgressDialog.show(ListingPage.this,"Please Wait", "Loading Date", true);

final Result[] results = new Result[]();

new AsyncTask<Void, Void, Void>() {

    //This is done in the background
    protected Void doInBackground(Void... params) {
       results = getResults();
       return null;
    }

    //This id done in the UI Thread
    protected void onPostExecute(Long result) {
       publishResults();
       myProgressDialog.dismiss();
    }

   }
}.execute();
myProgressDialog=ProgressDialog.show(ListingPage.this,“请稍候”,“加载日期”,true);
最终结果[]结果=新结果[]();
新建异步任务(){
//这是在后台完成的
受保护的Void doInBackground(Void…参数){
结果=getResults();
返回null;
}
//此id在UI线程中完成
受保护的void onPostExecute(长结果){
发表结果();
myProgressDialog.discouse();
}
}
}.execute();

问题可能是您试图从另一个线程更改用户界面,然后更改UI线程,这在Android中是不可能的

我建议试着使用一种新的方法。Asynct任务使您可以在后台线程中执行某些操作,并在完成后在UI线程中发布结果

为此,我将setSelected方法分为两种方法:一种是获取数据并创建数组和其他所有内容,另一种是创建适配器并将结果发布到列表

myProgressDialog = ProgressDialog.show(ListingPage.this,"Please Wait", "Loading Date", true);

final Result[] results = new Result[]();

new AsyncTask<Void, Void, Void>() {

    //This is done in the background
    protected Void doInBackground(Void... params) {
       results = getResults();
       return null;
    }

    //This id done in the UI Thread
    protected void onPostExecute(Long result) {
       publishResults();
       myProgressDialog.dismiss();
    }

   }
}.execute();
myProgressDialog=ProgressDialog.show(ListingPage.this,“请稍候”,“加载日期”,true);
最终结果[]结果=新结果[]();
新建异步任务(){
//这是在后台完成的
受保护的Void doInBackground(Void…参数){
结果=getResults();
返回null;
}
//此id在UI线程中完成
受保护的void onPostExecute(长结果){
发表结果();
myProgressDialog.discouse();
}
}
}.execute();

Janusz!我使用了上面提到的方法,但是,加载代码时搜索栏挂起的代码是:new AsyncTask(){//这是在后台保护的Void doInBackground(Void…params){setSelected();return null;}//这是在UI线程保护的Void onPostExecute(Long result){populateList(data);myProgressDialog.disease();}.execute()中完成的id;我猜线程是悬空的。是吗?对不起,我需要更多的代码,然后这个来真正找到一个错误。试着在原始问题中编辑它Janusz!我使用了上面提到的方法,但是,加载代码时搜索栏挂起的代码是:new AsyncTask(){//这是在后台保护的Void doInBackground(Void…params){setSelected();return null;}//这是在UI线程保护的Void onPostExecute(Long result){populateList(data);myProgressDialog.disease();}.execute()中完成的id;我猜线程是悬空的。是吗?对不起,我需要更多的代码,然后这个来真正找到一个错误。尝试在原始问题中编辑它