2013-05-26 5 views
0

В моем приложении я извлекаю некоторые данные из URL-адреса, поэтому я использовал индикатор выполнения в приложении, используя AsyncTask, но приложение не показывает индикатор выполнения и не показывает мои данные. Если я вызову метод loadDataFromURL() внутри метода onCreate(), тогда мои данные загрузятся, но я должен подождать некоторое время. Пожалуйста, проверьте мой код ниже.Мое приложение для 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 загружается в потоке пользовательского интерфейса. Вы должны вызвать 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(); 
    } 
} 
} 

Pls проверить ссылку ниже для получения дополнительной информации

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

0

Вы пропускаете вызов для выполнения этой задачи асинхронной, добавить

new LoadData().execute(); 

в вашем onCreate

0

Вы можете выполнить или запустить AsyncTask от нашей деятельности OnCreate.

запустить AsyncTask через LoadData.execute();

Этот метод запуска AsyncTask.

Благодаря

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