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

标签 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,我将不胜感激。

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

最佳答案

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

关于java - android - 从 AsyncTask doInBackground() 线程更新 ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22407058/

相关文章:

java - Jackson反序列化SNS消息报错MismatchedInputException

java - 长按阻止扩展可扩展 ListView

wpf - 带有嵌套扩展器的 ListView 不会折叠

android - Android Studio 中的多个 styles.xml 文件

android - 如何将字节数组(.h264 格式)解码为 android 中的视频?

android - 获取 ListView 以在各种数组之间切换以进行显示

android - 谁能在xamarin.android中解决我的ListView问题?

java - 在 if 语句中检查数组的两个返回值

java - 如何快速地将位图从一个 Activity 传递到另一个 Activity ?

JavaFX如何计算打字错误