如何在android上进行后台处理时显示视图

时间:2012-05-09 11:40:34

标签: android multithreading web-services view android-activity

我遇到了一个小问题,我不知道怎么做。 我创建了一个应用程序,它通过xml Web服务提取信息。 数据get被解析并插入到本地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上的状态消息。 但屏幕保持空白,只有在任务完成后才会显示。 我有点困惑,不知道从哪里开始等待屏幕工作。

我欢迎任何帮助。

克里斯

2 个答案:

答案 0 :(得分:1)

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

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

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

new loading().execute();

AsyncTask类如下所示。

  • 基本概念是初始化进度对话框 onPerExecute()。
  • 做重要的事情(非UI),如解析和全部 DoInBackground()。
  • 然后关闭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;


                }



            }   

答案 1 :(得分:0)

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

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

希望这就是你所需要的。