2015-10-04 66 views
0

我有我的AsyncTask内包含从Parse.com加载的数据的方法 我希望我的进度对话框显示,直到所有数据完全加载。AsyncTask进程对话框不显示当我启动我的活动

因此,如果数据需要5分钟才能加载,则进度对话框应显示确切的时间量,直到所有数据完成加载。

我已经尝试了许多其他不同的方法使用AsyncTask,仍然没有解决方案。

这是非常重要的任何人都可以帮我解决这个请

在我的主要Actvity的onCreate:

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

这个问题可能是你使用的创建进度对话框中的上下文。

尝试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

相关问题