Android 使用setText()更新TextView不会';无法在AsyncTask onProgressUpdate()中工作
我正在尝试使用有关正在进行的Android 使用setText()更新TextView不会';无法在AsyncTask onProgressUpdate()中工作,android,android-asynctask,textview,Android,Android Asynctask,Textview,我正在尝试使用有关正在进行的AsyncTask后台任务的信息更新我的用户界面。这是我的onProgressUpdate()方法 @Override protected void onProgressUpdate(final String... params) { Log.d(TAG, "onProgressUpdate()"); StringBuilder currentParam = new StringBuilder(); StringBuilder status
AsyncTask
后台任务的信息更新我的用户界面。这是我的onProgressUpdate()
方法
@Override
protected void onProgressUpdate(final String... params) {
Log.d(TAG, "onProgressUpdate()");
StringBuilder currentParam = new StringBuilder();
StringBuilder statusMessage = new StringBuilder();
txtInputFile.setText("Input: " + params[0]);
txtOutputFile.setText("Output: " + params[1]);
txtPercentDone.setText("" + MainActivity.getProgressStatus(statusMessage, currentParam) + "%");
txtStatusMessage.setText(statusMessage);
txtParamName.setText(currentParam);
}
但是,没有任何文本视图更新其文本。我正在我的doInBackground()
方法中调用publishProgress()
。日志显示,onProgressUpdate()
被正确调用。我知道TextView已经实例化,并且不是空的。有人知道发生了什么事吗
更新:这可能与此代码位于嵌套片段(ui正在更新)中的事实有关。当我显示这个与根相同的片段时,一切都正常。但我需要在这种情况下嵌套它。为什么会有不同?从
AsyncTask
传递参数和上下文,然后使用runOnUiThread
设置它们。如果您无法将日志放在此处了解问题。每个publishProgress()
都在UI线程上排队,因此如果您的doInBackground
在所有onProgressUpdate()
之前结束,您只能看到上次的UI更新
尝试测试添加Thread.sleep(毫秒)
以检查ui线程的并发性
@Override
protected Void doInBackground(Void... params) {
for (int i = 0; i < SOME_VALUE ;i++) {
publishProgress(""+i);
try {
Thread.sleep(MILLISECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return null;
}
@覆盖
受保护的Void doInBackground(Void…参数){
for(int i=0;i
也尝试记录thead id。@icbytes它们通过每个单独的日志显示在LogCat中,我可以确认此处显示的日志来自ui线程。调试说明了什么?你到底在传递参数吗?@icbytes我在传递参数,它们是正确的,我已经记录了它们的值。方法MainActivity.getProgressStatus
也是正确的,因为我现在对它进行了硬编码。啊,我看到了。你的StringBuilder永远不会被填满。如果状态字段是相关字段,则不需要runOnUiThread()
onProgressUpdate()
在ui上运行即使在ui线程上运行了onProgressUpdate()
,我也尝试过使用runOnUiThread()
,但仍然没有任何帮助(就像你希望它不会改变任何东西一样)。你能发布日志来检查问题吗?没有发生任何与日志相关的事情。没有异常或任何东西,(通过调试发现)TextView
中的文本值实际上发生了变化,只是没有在屏幕上更新。