2013-05-26 16 views
0

在我的應用程序中,我從URL中檢索一些數據,因此我使用AsyncTask在應用程序中實施了進度欄,但該應用程序既不顯示進度欄也不顯示我的數據。如果我在onCreate()方法內調用loadDataFromURL()方法,那麼我的數據會加載,但我必須等待一段時間。請檢查我的代碼如下。我的android應用程序不顯示進度條

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(); 
     } 
    } 


} 

回答

0

Asyntask加載在UI線程上。你應該調用execute來加載asynctask。你可以添加@Override Annotation,因爲它的overriden方法。您可以使用下面的參考。你的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

0

你缺少呼籲異步任務, 中添加

new LoadData().execute(); 

onCreate

0

您可以執行或從我們的活動的onCreate運行的AsyncTask。

運行的AsyncTask通過LoadData.execute();

此方法運行的AsyncTask。

謝謝