Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用setText()更新TextView不会';无法在AsyncTask onProgressUpdate()中工作_Android_Android Asynctask_Textview - Fatal编程技术网

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
中的文本值实际上发生了变化,只是没有在屏幕上更新。