2013-05-07 62 views
0

我想显示进度对话框“装载”,而我的应用程序打开。应用Progressdialog启动时不工作

我试过的AsyncTask和其他一些方法(Uithread,线程)来做到这一点,所有的都失败了。

我不知道为什么,但progressdialog没有显示在我的手机屏幕上。我总是看到一个黑屏。

getApnData抛出异常后,我的活动UI组件显示,进度对话框的作品,但为时已晚

下面是一些我的代码部分。

//1-1-1-1-1 
//On create or OnStart 

LoginProgressTask task1 = new LoginProgressTask(); 
     task1.execute(); 

//Inner class 
    class LoginProgressTask extends AsyncTask<String, Integer, Boolean> { 
     @Override 
     protected Boolean doInBackground(String... params) { 
      try { 
       getApnData(); // Do your real work here 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      return Boolean.TRUE; // Return your real result here 
     } 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      LoginUI.this.pd = ProgressDialog.show(LoginUI.this, "", "Loading...", true, true); 
     } 

     @Override 
     protected void onPostExecute(Boolean result) { 
      // LoginUI.this.pd.dismiss(); 

     } 
    } 

//2-2-2-2-2 
//OnCreate or OnStart 
pd = ProgressDialog.show(this, "", "Loading...", true, false); 

thread = new Thread(this); 
thread.start(); 


//run 
@Override 
    public void run() { 
     try { 
      firstRunUI(); 
      handler.sendEmptyMessage(0); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

    } 

//UIRun 
    public void firstRunUI() { 
     runOnUiThread(new Runnable() { 

      @Override 
      public void run() { 
       try { 
        getApnData(); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 

      } 
     }); 
    } 

//Handler 
private Handler handler = new Handler() { 
     public void handleMessage(Message msg) { 
      pd.dismiss(); 


     } 
    }; 

回答

2

好吧首先, 您可以使用下面的场景显示进度:

  1. 使用您LoginProgressTask如下

    新LoginProgressTask()执行();

  2. 变化

    LoginUI.this.pd = ProgressDialog.show(LoginUI.this, “”, “载入中...”,真,真)

  3. 使用上使用以下的onCreate或在onStart而不是在问题你的第二个代码块的

    新LoginProgressTask()执行()。

这里有一个完整的示例

class SomeActivity extends Activity { 
     ProgressDialog pd ; 
     class LoginProgressTask extends AsyncTask<String, Integer, Boolean> { 
     @Override 
     public void onPreExecute(){ 
     pd = ProgressDialog.show(LoginUI.this, "", "Loading...", true, true); 
     } 
       @Override 
       protected Boolean doInBackground(String... params) { 
        try { 
         getApnData(); // Do your real work here 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } 
        return Boolean.TRUE; // Return your real result here 
       } 
     } 

     @Override 
      protected void onPostExecute(Boolean result) { 
       pd.dismiss(); //or use handlers it is better 

      } 
     } 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
        new LoginProgressTask().execute(); 
    } 
    } 

这将做的工作适合你!

河畔确保您关闭ProgressDialog上PostExecute方法*

注意 不要创建主UI线程意见,因为这可能导致内存泄漏

更新 要更新从getAbnData() UI元素,您应该使用处理程序

Handler handler = new Hanlder(){ 
    @Override 
    public void handleMessage(int what){ 
//changing UI Elements code comes here 

} 
} 

从代码使用处理程序。的sendMessage(NUMER)

,然后它会处理消息

Communicating with the UI Thread

+0

不为工作,帮助我的一些朋友。他是Android开发新手。我曾尝试过这种方法,他们工作正常。 – Tugrul 2013-05-07 13:50:05

+0

@tgrll这将为你做这份工作!并不意味着你实际工作的工作,但它是做代码的工作或工作的首字母缩略词!也就是说,请不要误会,如果解决方案有效,给我们一个反馈意见 – 2013-05-07 13:54:09

+0

对不起,错误理解。 Yeap它正在工作,我的代码现在正在工作。我以前在我的项目中尝试过这种方法,并且它们工作正常。 但不是在这个项目中。这听起来很奇怪。他的代码不复杂。例如,在getApnData()中,他到达UI元素并更改其中的一些元素。 setText,setEnabled等。 我修复了部分代码和进度对话框,现在显示。 但在一段时间内,它正在旋转,之后它锁定。 仍然需要帮助。 – Tugrul 2013-05-07 13:58:05

1

这段代码你解决你的问题,甚至不使用的AsyncTask。希望它可以帮助你。

private void Load() { 
     // TODO Auto-generated method stub  
     p = new ProgressDialog(YourActivity.this); 
     p.setMessage("Loading..."); 
     p.setCancelable(false); 
     p.show(); 

     new Thread(new Runnable() { 
      public void run() { 
       // TODO Auto-generated method stub     
       mHandler.sendEmptyMessage(0); 
      } 
     }).start(); 
    } 
} 

private Handler mHandler = new Handler() { 
    public void handleMessage(android.os.Message msg) { 
     super.handleMessage(msg); 
     p.dismiss(); 
     switch (msg.what) { 

     case 0: 
      //LOAD YOUR ACTIVITY HERE 
      break; 
     } 
    } 
}; 
+0

我做同样的事情在我的codepart-2。 – Tugrul 2013-05-07 13:30:42

+0

我检查了我自己,它工作,错误是在codepart-1。你测试了我的代码吗?屏幕是否保持黑色? – cgalvao1993 2013-05-07 13:45:59

+0

是的黑色,但我找到了解决办法。但只有部分解决方案。此时进度对话框被锁定。 – Tugrul 2013-05-07 13:49:17