+-
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中) - 乐贴网