【问题标题】:Android: How to print running text to the screenAndroid:如何将正在运行的文本打印到屏幕上
【发布时间】:2012-06-11 21:19:52
【问题描述】:

我有一个后端进程正在运行 (AsyncTask)。我有兴趣打印出 System.out.println();将信息发送到屏幕(类似于 Eclipse 中的控制台),以便通知用户哪些计算正在后面运行。

我希望完成的是看到在屏幕上运行的文本 - 类似于当前焦点活动顶部的对话框。

有人有这方面的经验吗?

谢谢,D。

【问题讨论】:

  • 您必须将上下文传递给 AsyncTask 的构造函数,这样您才能显示对话框。另一方面,您可能希望将之前的一些答案标记为已接受。

标签: android dialog android-asynctask


【解决方案1】:

我认为您不能劫持 System.out.print() 并将其发送到屏幕。但是您可以制作一个 TextView 并在新的文本行准备好时将它们发送给它。这样的事情应该可以工作。

String outputStr = "";

//Whenever you want to add a line to the TextView do it like this:
outputStr += "\n" + [yourNewText];
mTxt.setText(outputStr);

如果您以这种方式添加大量行,用户会看到与 Eclipse 控制台相同的情况。

由于您可以使用 TextView 执行此操作,因此您可以将该 TextView 添加到自定义对话框并将其显示给用户。

【讨论】:

  • 谢谢!这很好用。我在doInBackground() 中有outputStr += "\n" + [yourNewText]; 部分,在onProgressUpdate() 中有mTxt.setText(outputStr); 部分,因此它写入了实际行。我将outputStr设置为AsyncTask的成员变量
【解决方案2】:

我相信您还需要在 UI 线程中更新文本视图。在异步任务中,您调用onProgressUpdate,然后在 UI 线程中执行。否则,您可以使用view.post,也可以使用Handler

【讨论】:

  • 嗨@James Coote - 你相信我可以像@Tim 提到的那样使用publishProgress()->onProgressUpdate() 吗?这意味着我可以将带有进度通知的字符串发送到显示在主线程中运行的 Activity 的自定义对话框?
  • 当然,这就是我的建议 :) 另外,正如@Sbossb 建议的那样,您可以通过将context 传递给AsyncTask 的构造函数来做到这一点。您需要小心一点,因为当活动重新启动/重新创建时(例如当用户点击主页按钮,然后稍后返回应用程序时),按住 context 可能会导致内存泄漏。我通常将AsyncTasks 作为Activity 的内部类,因此我可以使用MyActivity.this 访问context
  • 谢谢詹姆斯 - 这是非常有用的。我在蒂姆的回答下面写了一条评论。我设法在不使用传递上下文的情况下实现了这一点。感谢有关 memLeak 的信息 - 知道总是很高兴! :)
猜你喜欢
  • 2021-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-09
  • 1970-01-01
  • 1970-01-01
  • 2013-05-08
相关资源
最近更新 更多