2014-01-17 3 views
-1

Мой экран, когда я нажимаю кнопку, медленно загружается (из-за загрузки изображений, файлы изображений на самом деле очень маленькие), поэтому я попытался использовать AsyncTask, чтобы помочь. Программа работает, но я переместил загрузку изображения в AsyncTask, чтобы увидеть, будет ли она загружаться быстрее, и приложение будет сбой каждый раз. Я предполагаю, что это связано с тем, как я его настроил. Как я могу это исправить? Лучше ли использовать поток runnable? Благодаря!Как настроить параметры doInBackground в моей AsyncTask?

Класс:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    // no title 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    // set full screen 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
         WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    // inflate listview 
    setContentView(R.layout.gmg); 
    **new Load.execute(); // executes AsyncTask** 
    ... 
    gmgListView = (ListView) findViewById(R.id.gmg_list2); 
    GMGListViewAdapter adapter = new GMGListViewAdapter(this, 
            R.layout.gmg_list_row, rowItems); 
    gmgListView.setAdapter(adapter); 
    gmgListView.setOnItemClickListener(this); 
} 

AsyncTask:

private class Load extends AsyncTask<String, Void, Void> { 

    private ProgressDialog Dialog = new ProgressDialog(GMGListViewActivity.this); 

    @Override 
    protected void onPreExecute() { 
     Dialog.setMessage("Doing something..."); 
     Dialog.show(); 
    } 
    @Override 
    protected Void doInBackground(String... params) { 
     SparseArray<Spanned> gmgText = null; 
     Integer[] right = null; 
     SparseArray<Drawable> appIcon = null; 
     try { 
      gmgText = ParseContent.queryGMGText(); 
      right = ParseContent.queryGMGRight(); 
      appIcon = ParseContent.queryDrawable(); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 

     // Inflate GMG's rows 
     rowItems = new ArrayList<GMGRowItem>(); 
     for (int i = 0; i < gmgText.size(); i++) { 
      GMGRowItem item = new GMGRowItem(appIcon.get(i), gmgText.get(i), right[i]); 
      rowItems.add(item); 
     } 

     return null; 
    } 
    protected void onPostExecute(Void unused) { 
     Dialog.dismiss(); 
    } 
} 
+3

не могли бы вы отправить логарифм вместе с номером строки, чтобы мы могли узнать причину аварии? –

+0

Какая у вас ошибка? – Kunu

+0

добавить rowItems.add (item); в onPostMethod doinBackground не добавляя you'r строку добавить это в onpost() –

ответ

1

Вы должны применить некоторые изменения в коде, как ...

необходимо установить список адаптера в методе onPostExecute и удалите его из onCreate().

После завершения фонового процесса он будет взаимодействовать с нитью ui.

protected void onPostExecute(Void unused) { 
     Dialog.dismiss(); 
    GMGListViewAdapter adapter = new GMGListViewAdapter(this, 
            R.layout.gmg_list_row, rowItems); 
    gmgListView.setAdapter(adapter); 
    } 

Попробуйте это и сообщите мне, если у вас есть какие-либо проблемы.

+0

Отлично! Я подозревал, что это, должно быть, было во сне, и я проснулся к нему ха-ха –

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