我的Android应用程序没有显示进度条

时间:2013-05-26 11:36:33

标签: android android-progressbar

在我的应用程序中,我正在从URL中检索一些数据,因此,我使用AsyncTask在应用程序中实现了进度条,但应用程序既没有显示进度条也没有显示我的数据。如果我在loadDataFromURL()方法中调用onCreate()方法,那么我的数据会加载但是,我必须等待一段时间。请检查下面的代码。

public class MainActivity extends Activity 
{
    Context context;

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

        context = getApplicationContext();

    }

    private void loadDataFromURL() 
    {
        // Here I load some data from URL
    }




    ProgressDialog dialog;

    class LoadData extends AsyncTask<Void, Void, Void> 
    {
        protected void onPreExecute() 
        {
                   dialog = ProgressDialog.show(context, "Loading...", null);
        }

        protected Void doInBackground(Void... unused) 
    {
            try 
            {
                loadDataFromURL();

            Log.d("-DONE", "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD");
            } 
            catch(Exception e) 
            {
                Log.d("-ERORR", "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE");
            } 

            return null;
        }

        protected void onProgressUpdate(Void... unused) 
        {
        }

        protected void onPostExecute(Void unused) 
        {
            dialog.dismiss();
        }
    }


}

3 个答案:

答案 0 :(得分:0)

您缺少对异步任务的调用, 添加

new LoadData().execute();

onCreate

答案 1 :(得分:0)

您可以从我们的Activity Oncreate执行或运行AsyncTask。

通过LoadData.execute();

运行AsyncTask

此方法运行AsyncTask。

由于

答案 2 :(得分:0)

在UI线程上加载Asyntask。你应该调用execute来加载asynctask。您自己的覆盖方法添加了@Override Annotation。您可以使用以下内容作为参考。你的doInbackground什么都不做。所以你可能看不到对话框,因为asynctask非常快地完成了它的操作。做一些计算,以便您可以看到对话框。

public class MainActivity extends Activity 
{

@Override 
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    dialog = new ProgressDialog(MainActivity.this);
    dialog.setTitle("Loading...");
    new LoadData().execute();  // load asynctsk on ui thread

}

private void loadDataFromURL() 
{
    // Here I load some data from URL
}   

class LoadData extends AsyncTask<Void, Void, Void> 
{
    @Override // missing the override annotation
    protected void onPreExecute() 
    {
        super.onPreExecute() // missing super call
        dialog.show();    // show dialog   
    }
    @Override
    protected Void doInBackground(Void... unused) 
    {   
        try 
        {
            loadDataFromURL(); // do network related operation here

            Log.d("-DONE", "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD");
            //do not update ui here 
        } 
        catch(Exception e) 
        {
            Log.d("-ERORR", "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE");
        } 

        return null;
    }
    @Override
    protected void onProgressUpdate(Void... values) {

        super.onProgressUpdate(values); // missing super call
}
    @Override
    protected void onPostExecute(Void result) 
    {
         super.onPostExecute(result) // missing super call
        dialog.dismiss();
    }
}
}

请查看以下链接以获取更多信息

http://developer.android.com/reference/android/os/AsyncTask.html