【问题标题】:AsyncTask get() method not working properlyAsyncTask get() 方法无法正常工作
【发布时间】:2013-06-16 18:13:04
【问题描述】:

我正在使用以下代码:

//(...)
translationTextView.setText("Searching for translation...");
translationTextView.setVisibility(View.VISIBLE);

myAsyncTask = (MyAsyncTask) new MyAsyncTask().execute(someString);

try {
    //As I understand it should wait here until AsyncTask is completed. But why for the time of execution translateTextView value is ""?
    translationTextView.setText(translateTask.get() + "<BR>");
} catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (ExecutionException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

问题是 translationTextView 的值是 "" 直到 myAsyncTask 完成。所以看起来像

translationTextView.setText("Searching for translation...");

未被调用。我做错了什么?

【问题讨论】:

  • 我认为这只是您的问题中的一个错字,但您正在初始化“myAsyncTask”但调用“translateTask”。无论哪种方式,您都不应该在主 UI 线程上调用 get。

标签: java android multithreading android-asynctask


【解决方案1】:

它被调用,但你调用了

translationTextView.setText(translateTask.get() + "<BR>");

get() 是一个阻塞调用

尝试在您的onPostExecute() 中设置文本。如果我理解正确,那么这样的事情应该会给你你想要的

   //(...)
        translationTextView.setText("Searching for translation...");
        translationTextView.setVisibility(View.VISIBLE);

        myAsyncTask = (MyAsyncTask) new MyAsyncTask().execute(someString);

然后,假设MyAsyncTask 是您的Activity 调用translationTextView.setText() 的内部类,插入您尝试从doInBackground() 返回的任何内容

【讨论】:

  • 但是为什么在调用get()方法之前没有执行代码呢?我怎样才能让它发挥作用?
  • 试试我更新的答案。此外,您可以在其中放置一个断点以查看究竟执行了什么。进度对话框可能会更好,这样用户会看到某些东西在移动,并且不会认为您的应用程序被冻结......这是用户的心理问题
  • 这正是我之前所做的。我的任务是在线翻译文本。但在此之后我也离线翻译它。我想等待在线翻译完成后再调用离线翻译。到目前为止,我一直在 onPostExecute 方法中调用离线翻译,但我认为这不是一个好方法,考虑到我的任务名称是 onlineTranslation...我希望该任务只进行在线翻译,完成后从 main 调用离线翻译线程...
  • 我不确定我是否完全理解(为什么有两个翻译,这是什么),但无论哪种方式,您都应该在 onPostExecute() 中设置文本或从那里调用一个函数来做其他事情跨度>
  • 所以在调用 AsyncTask 之前无法将我的 TextView 的文本设置为“正在搜索翻译...”?
【解决方案2】:

正如codeMagic 指出的那样,如果您还没有覆盖AsyncTask 子类的onPostExecute() 方法,请覆盖。它在主线程上执行,你应该在那里更新你的 UI。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    • 2019-06-02
    • 2021-12-29
    • 2014-09-29
    相关资源
    最近更新 更多