2015-10-04 3 views
0

У меня есть метод внутри моей AsyncTask, который содержит данные, которые он загружает из Parse.com. . Что бы я хотел, это для моего диалогового окна прогресса, отображаемого до тех пор, пока все данные не будут полностью загружены.Диалог прогресса AsyncTask не отображается, когда я запускаю свою активность

Поэтому, если данные занимают 5 минут для загрузки, то для этого точного времени должен отображаться индикатор прогресса, пока все данные не закончили загрузку.

Я пробовал много других методов использования AsyncTask и до сих пор не решил.

Это очень важно, кто может помочь мне решить эту проблему, пожалуйста,

В моей OnCreate Главная Actvity в:

ProgressDialog progress = new ProgressDialog(this); 
new MyTaskUpcomingShows(progress).execute(); 

Мой AsycTask С Прогресс Диалог:

class MyTaskUpcomingShows extends AsyncTask<Void, Void, Void> { 

    ProgressDialog progress; 

    public MyTaskUpcomingShows(ProgressDialog progress) { 
     this.progress = progress; 
    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     progress.setMessage("Loading..."); 
     progress.show(); 
    } 

    @Override 
    protected Void doInBackground(Void... arg0) { 
     parseQueryUpcomingShowsEventsTable(); 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 
     progress.dismiss(); 
    } 

} 

Дополнительная информация:

Когда я пытался сделать AsyncTask таким образом он показал, но только из-за Thread.sleep

private class BackgroundTask extends AsyncTask <Void, Void, Void> { 
private ProgressDialog dialog; 

public BackgroundTask(MyMainActivity activity) { 
    dialog = new ProgressDialog(activity); 
} 

@Override 
protected void onPreExecute() { 
    dialog.setMessage("Doing something, please wait."); 
    dialog.show(); 
} 

@Override 
protected void onPostExecute(Void result) { 
    if (dialog.isShowing()) { 
     dialog.dismiss(); 
    } 
} 

@Override 
protected Void doInBackground(Void... params) { 
    try { 
     Thread.sleep(5000); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 

    return null; 
} 

}

Дело в том, если я сделать это таким образом диалог прогресса не показывает если я удалю Thread.sleep (5000)

Также, если данные загружены до 5 секунд, диалог прогресса все еще вращается. Предполагается прекратить, как только данные загружены

+0

почему вы заходящего сообщение 2 раза ?? @casguapo –

+0

необходимо просмотреть класс progressdialog –

+0

@Paudel Я пробовал это так же, как и MyTaskUpcomingShows task = new MyTaskUpcomingShows(); task.execute(); и это все еще не сработало ... Я предполагаю, что это ошибка, когда сообщение дважды, но я удалил это и попытался таким образом, и он все еще не работал. – Equivocal

ответ

0

кажется, что вам нужно, это

class MyTaskUpcomingShows extends AsyncTask<Void, Void, Void> { 

    ProgressDialog progress; 

    public MyTaskUpcomingShows() { 
     //nothing 
    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     progress = ProgressDialog.show(MainActivity.this, "Loading", "Loading...", true, false); 
    } 
+0

Я сейчас попробую ваш образец. – Equivocal

+0

просто попробовал ваше решение. Это не работает – Equivocal

0

Проблема может быть контекст используется для создания диалога прогресса.

Try YourClassName.this для контекста

public class MainActivity extends AppCompatActivity{ 


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

    new MyAsyncTask(MainActivity.this).execute(""); 

} 


class MyAsyncTask extends AsyncTask<String,Void,List<Order>> 
{ 
    Context _context ; 
    ProgressDialog progressDialog; 

    public MyAsyncTask(Context context) 
    { 
     this._context = context; 
    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     progressDialog = ProgressDialog.show(_context, "TITLE","MESSAGE"); 
    } 

    @Override 
    protected List<Order> doInBackground(String... strings) { 

    // load your data 
     return null; 
    } 

    @Override 
    protected void onPostExecute(List<Order> orders) { 
     super.onPostExecute(orders); 

     progressDialog.dismiss(); 

    // do your stuff 



    } 
} // END OF ASYNC TASK 
} // END OF MainActivity 
+0

Попробуем посмотреть, работает ли он – Equivocal

+0

это не сработало – Equivocal

+0

@casguapo вы можете указать свой код активности. с методом onCreate, где вы вызываете эту AsyncTask. и проверите logcat, чтобы увидеть, есть ли какая-либо ошибка? – Tarun

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