android - 从AsyncTask doInBackground()线程更新ListView

时间:2014-03-14 13:56:16

标签: java android listview android-listview android-asynctask

我有一个线程做一些图像处理工作正常,但在整个执行期间我希望它发送字符串到ListView更新用户的进度,我使用publishProgress()来显示字符串但我无法动态更新它,只在后台任务完成后才显示所有内容。

后台主题:

@Override
protected void onProgressUpdate(String... values) {
    super.onProgressUpdate(values);
    String message = "";
        for (String str : values) {
    message = str;
    }
    publishProgress.addItem(message); // Calls method in publishProgress.class with the update string.
}

publishProgress类:

// Imports
public class publishProgress extends Activity 
{
public static ArrayAdapter<String> ad;
public static ArrayList <String> updates = new ArrayList <String>();
public static ListView list;
}
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);     
    setContentView(R.layout.activity_publishProgress);

    ad = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, updates);
    list = (ListView)findViewById(R.id.listView1);
    list.setAdapter(ad);
}

public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

public static void addItem(String text) {
    updates.add(text);
    ad.notifyDataSetChanged();
}

问题是我在调用ad.NotifyDataSetChanged()时遇到nullPointerException;

我没有太多的Android体验,所以如果有人有任何想法如何动态地添加字符串到ListView而不冻结GUI,将非常感激。

  • 如果有人确实找到了解决方案,您可以尝试解释一下,以便下次我能理解,谢谢!

1 个答案:

答案 0 :(得分:1)

doInBackgroud()函数上进行依赖于网络调用的操作,依赖于UI的所有函数都在onPostExecute()函数上实现它们,因为这里你回到了UI线程。请将notifyDataSetChanged()调入onPostExecute()