2017-02-07 72 views
0

我試圖在單擊登錄按鈕時顯示進度對話框。但只有當我到達我的方法onClick結束時才顯示進度對話框。而不是一個開始。 在signIn方法中,我做了一個asynctask來訪問服務器。 所以無時無刻不在進行對話顯示。只有在onClick方法結束時,纔會顯示進度對話框.... 有些人知道我在做什麼錯?Android進度對話框直到onClick方法結束時才顯示

public void onClick(View view) { 
      progressDialog = new ProgressDialog(SignIn.this); 
      progressDialog.setMessage("Sign in in progress"); 
      progressDialog.setTitle("Please wait"); 
      progressDialog.setCancelable(false); 
      progressDialog.setIndeterminate(true); 

      progressDialog.show(); 

      repSignIn = signIn(SignIn.this, etEmail.getText().toString(), etPassword.getText().toString()); 


      if(!repSignIn.hasError()) 
      { 
       Toast.makeText(getApplicationContext(), "Sign In successfully", Toast.LENGTH_SHORT).show(); 
       onBackPressed(); 
      } 
      else 
      { 
       Toast.makeText(getApplicationContext(), repSignIn.getErrorMessage(), Toast.LENGTH_SHORT).show(); 
      } 
      //progressDialog.cancel(); 
     } 

感謝很多提前

納丁

回答

0

而是在其的onClick的progressDialog你需要把你的AsyncTaskonPreExecuteonPostExecute駁回。

原因是AsyncTask使用的工作線程將是異步的,這就是爲什麼progressDialog在預期之前完成的原因。

class MyAsyncTask extends AsyncTask<Void, Void, Void>{ 
    @Override 
    protected void onPreExecute() { 
     progressDialog.show(); 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
    // do your stuff 
    return null; 
    } 

    @Override 
    protected void onPostExecute(Void aVoid) { 
    progressDialog.dismiss(); 
    } 
} 
+0

但asynctask是在一個圖書館(我開發)。所以我不想把進度對話框放在onProExecute中...我想在啓動asynctask之前顯示... – Banana

+0

有沒有從庫中回調,asyncTask是否返回任何東西? –

+0

在圖書館的方法中,我打電話給asynctask ans我等待它的結果。 String result = new sendDataToServer()。execute(url,「PUT」,jsonData.toString())。get();這是問題嗎? – Banana

0

在異步任務覆蓋onPreExecute()方法,並有你有顯示進度條..

private void signIn(your parameters here) { 
     new AsyncTask<Void, Void, Void>(){ 

      @Override 
      protected void onPreExecute() { 
       super.onPreExecute(); 
       progressDialog = new ProgressDialog(SignIn.this); 
       progressDialog.setMessage("Sign in in progress"); 
       progressDialog.setTitle("Please wait"); 
       progressDialog.setCancelable(false); 
       progressDialog.setIndeterminate(true); 
       progressDialog.show(); 
      } 

      @Override 
      protected void doInBackground(Void... params) { 
       //your logic here 
      } 

      @Override 
      protected void onPostExecute(JSONObject response) { 
       super.onPostExecute(response); 
       progressDialog.dismiss(); 
      } 
      }.execute(); 
    } 

希望這有助於

0

使用你的進步dailog在Asyntask。在onExecute中初始化並啓動對話框,並在onPostExecute中關閉對話框。 爲我工作,

@Override 
protected void onPreExecute() { 
    progress = new ProgressDialog(UpdateActivity.this); 
    progress.setCancelable(false); 
    progress.setMessage("Please wait data is Processing"); 
    progress.show(); 
} 
@Override 
protected void onPostExecute(Void aVoid) { 
    super.onPostExecute(aVoid); 
    progress.dismiss(); 

}