2013-07-26 2 views
0

비슷한 문제가 있음을 알고 있지만 여전히 답변을 찾지 못했습니다. 문제는이 긴 작업에 대한 진행 대화 상자가 표시되지 않지만 여전히 프로세스가 완료되고 있다는 것입니다. 컨텍스트에 문제가 있다고 생각하지만이 문제를 해결하는 방법은 없습니다.AsyncTask의 진행 대화 상자가 표시되지 않습니다.

public class MainActivity extends Activity { 

Utilities uti = new Utilities(); 
SharedPreferences prefs = null; 
private ContactServiceActivity contactService; 
ProgressDialog mProgressDialog; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    contactService = new ContactServiceActivity(getApplicationContext()); 

    doFirstRun(); 

    Intent i = new Intent(getBaseContext(), ContactListActivity.class); 
    startActivity(i); 
} 

private void doFirstRun() { 
    SharedPreferences settings = getSharedPreferences("pl.stxnext.stxcontactsync", MODE_PRIVATE); 
    if (settings.getBoolean("isFirstRun", true)) { 

     new firstRunTask().execute(); 

     SharedPreferences.Editor editor = settings.edit(); 
     editor.putBoolean("isFirstRun", false); 
     editor.commit(); 
    } 
} 

private class firstRunTask extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     mProgressDialog = new ProgressDialog(MainActivity.this); 
     mProgressDialog.setTitle("Trwa synchronizacja danych"); 
     mProgressDialog.setMessage("Może to zająć chwilę, proszę czekać."); 
     mProgressDialog.setIndeterminate(false); 
     mProgressDialog.show(); 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     contactService.getAssetsAtFirstRun(); 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     mProgressDialog.dismiss(); 
     uti.showToast(getBaseContext(), "Zapisano kontakty."); 
    } 
} 

}

+0

는 this..http 시도 마십시오 여전히 //stackoverflow.com/questions/17585759/cant-dismiss-progressdialog-after-the-asynctask-complete/17585792#17585792 – TheFlash

답변

1

doFirstRun();을 호출하여 asyctask를 시작한 후 활동을 시작하려고합니다. 따라서 생성 된 진행 대화 상자가 표시되지 않습니다. 당신이 제거하면 다음과 같이/작동한다는 startActivity를 부분을 주석 : 당신은 여전히 ​​어쨌든 활동을 시작하려면, 당신은 그 후 AsyncTask를 시작해야


doFirstRun(); 
// comment the following 
//Intent i = new Intent(getBaseContext(), ContactListActivity.class); 
//startActivity(i); 

.

2

같은 하나의 생성자를 만들 :

Context _context; 
public firstRunTask(Context context) 
{ 
    _context=context; 
} 

과 대화에 상황이 _context를 사용합니다.

2
Try like this 

private class LongOperation extends AsyncTask<String, Void, String> { 

     @Override 
     protected String doInBackground(String... params) { 


      // Do something 

      return "Executed"; 

     }  

     @Override 
     protected void onPostExecute(String result) { 
      if(mProgressDialog.isShowing()){ 
      mProgressDialog.dismiss(); 
     } 


     } 

     @Override 
     protected void onPreExecute() { 
     ShowLoading(); 
     } 

     @Override 
     protected void onProgressUpdate(Void... values) { 

     } 

    } 
    private void ShowLoading(){ 
      mProgressDialog = new ProgressDialog(this); 
      //mProgressDialog.setMessage("Loading Please wait ...."); 
      mProgressDialog.setIndeterminate(false); 
      mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
      mProgressDialog.setCancelable(false); 
      mProgressDialog.show(); 
     } 
+0

작동하지 –

1

는 this-

private class firstRunTask extends AsyncTask<Void, Void, Void> { 
ProgressDialog mProgressDialog; 
@Override 
protected void onPreExecute() { 
    super.onPreExecute(); 
    mProgressDialog=ProgressDialog.show(MainActivity.this, "Trwa synchronizacja danych", "Może to zająć chwilę, proszę czekać."); 

} 

@Override 
protected Void doInBackground(Void... params) { 
    contactService.getAssetsAtFirstRun(); 
    return null; 
} 

@Override 
protected void onPostExecute(Void result) { 

    if(mProgressDialog != null) 
{ 
if(mProgressDialog.isShowing()) 
    { 

     mProgressDialog.dismiss(); 
     uti.showToast(getBaseContext(), "Zapisano kontakty.");} 

    } 
} 
관련 문제