0

我有一个小问题,我不知道该怎么做。我创建了一个应用程序,它通过 xml Web 服务提取信息。数据被解析并插入到本地 sqlite 数据库中。到目前为止一切正常。由于数据的大小(根据提取的信息而有所不同),我打算插入一个带有进度条和微调器的加载屏幕,以通知用户采取了行动。好吧,可以这么说,它计划以这种方式工作。

我的问题是,一旦工作完成,它就会显示出来,而不是bevor。这就是我的做法:

Handler phHandle = new Handler(){
        @Override
        public void handleMessage(Message msg){
            int progress = msg.arg1;
            pb.setProgress(progress);
        }
    };
    class firstInitHandler implements Runnable{
          private Handler phHandle;
          public void setHandle(Handler h){
              this.phHandle = h;
          }
          public void run(){
                try {
                    firstInit i = new firstInit();
                    i.doInit(this.phHandle);
                    if(i.isResult())
                    i.doParse();
                    if(i.isData()){
                        i.doTasks();
                        i.doEquipment();
                        i.doUser();
                        i.doCompany();
                        i.doForms();
                        i.doSysconfig();
                    }
                } catch (NullPointerException e) {
                    e.printStackTrace();
                }
          }
    }
    firstInitHandler h = new firstInitHandler();
    h.setHandle(phHandle);
    h.run();

这是方法的一部分。到目前为止,它的工作原理。处理信息的线程在 sdk 的任务管理器中可见。我还可以看到在调试系统工作时在 logcat 上创建的状态消息。但是屏幕保持空白,仅在任务完成后才显示。我有点困惑,不知道从哪里开始让等待屏幕工作。

我欢迎任何帮助。

克里斯

4

2 回答 2

1

您可以使用 AsyncTask 来顺利工作....

在您的活动中定义 AsyncTask ....

然后您可以通过这种方式从 onclick 或 onCreate 内部调用 AsyncTask

new loading().execute();

AsyncTask 类将如下所示。

  • 基本概念是在 onPerExecute() 中初始化进度对话框。
  • 在 DoInBackground() 中执行解析等繁重的工作(非 UI)。
  • 然后关闭 onPostExecute() 中的对话框。

  • 您不能在 DoinBackGround 中进行 UI 更改,但可以在 OnPre / OnPostExecute() 中进行。

课程如下。

 private class loading extends AsyncTask'<'String, Integer, Boolean>

{

ProgressDialog dialog ;
                @Override
                protected void onPostExecute(Boolean result) {
                    // TODO Auto-generated method stub
                    super.onPostExecute(result);
                    if(result==true) 
                    {  

                     dialog.dismiss();

                    }

                }

                @Override
                protected void onPreExecute() {
                    // TODO Auto-generated method stub
                    super.onPreExecute();

                   dialog = new ProgressDialog(current.this);
                            dialog.setMessage("Loading...");
                            dialog.show();

                }

                @Override
                protected void onProgressUpdate(Integer... values) {
                    // TODO Auto-generated method stub
                    super.onProgressUpdate(values);
                }

                @Override
                protected Boolean doInBackground(String... params) {
                    // TODO Auto-generated method stub

                    try {
                        firstInit i = new firstInit();
                        i.doInit(this.phHandle);
                        if(i.isResult())
                        i.doParse();
                        if(i.isData()){
                            i.doTasks();
                            i.doEquipment();
                            i.doUser();
                            i.doCompany();
                            i.doForms();
                            i.doSysconfig();
                        }
                    } catch (NullPointerException e) 
                       {
                        e.printStackTrace();
                        return false;
                        }
                     return true;


                }



            }   
于 2012-05-11T12:06:02.137 回答
0

您是否尝试过查看 Android 开发者资源?

对话教程。此页面上显示了一个进度对话框示例,或者您可以跳到特定的进度对话框部分,其中显示了所有可能的命令、用法等。

希望这是你需要的。

于 2012-05-09T12:01:58.467 回答