+-
android – 在AsyncTask中如何将数据从doInBackground()“立即”传递到主UI而不是在每次循环之后? (BufferedReader中)
EDIT1:

我确实更改了代码,以便更新在while循环中完成.然而,没有变化.在下面的代码中显示另外,删除onProgressUpdate()上的其他不相关的行.
在下面的代码中显示.

请回答,就像你会教一个业余爱好者.
我正在将数据从doInBackground()传递到主UI.有用.但是,它很慢.
我希望显示“即时”结果,而不是在循环完成后.这就是编写代码的方式,但是,性能方面,如果循环运行100次,我只在100次迭代完成后得到结果AT一次.这很奇怪.我想在每次迭代后输出结果.如何实现这一目标.
目前;

    protected Void doInBackground(Void... params) 
        {

            try {
    //bunch of code
for(int k=x1[3];k<=x2[3];k++)
            {
//Process process = execute it;
    reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
                    int j;
                    char[] buffer = new char[4096];
                    StringBuffer output = new StringBuffer();
                    while ((j = reader.read(buffer)) > 0)
                    {
                    output.append(buffer, 0, j); 
                    }
                    str = output.toString();
                    Log.d("1:STR VALUE", str);
                    publishProgress(str);
                    reader.close();  

    } //FOR loop ends
                 }}
    protected void onProgressUpdate(String... values) {
            results1.append(str);
            results1.append("\n");
            super.onProgressUpdate(values);
        }

如何修改StringBuffer输出,以便在读者获取数据后获得即时结果?
谢谢

最佳答案
onProgressUpdate在UI线程中运行.

因此,您应该能够在循环内使用此方法与UI进行交互.但是,尝试使用方法的给定参数:

protected void onProgressUpdate(String... values)
{
    results1.append(values[0]);
    results1.append("\n");
}

调用super.onProgressUpdate(values);由于默认实现为空,因此无用.

点击查看更多相关文章

转载注明原文:android – 在AsyncTask中如何将数据从doInBackground()“立即”传递到主UI而不是在每次循环之后? (BufferedReader中) - 乐贴网