2013-07-26 4 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

Вы начинаете заниматься деятельностью после активации asyctask, называя doFirstRun(); , и, таким образом, вы не видите созданный прогресс. если удалить/закомментировать часть startActivity следующим образом, она должна работать:


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

Если вы все еще хотите, чтобы начать эту деятельность в любом случае, то вы должны начать AsyncTask после этого.

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.");} 

    } 
} 
Смежные вопросы