android:如何每2秒在另一个活动中将文本追加到TextView

时间:2012-01-10 23:00:25

标签: android

我有两个活动,一个是主要的,我还有一个名为Test的活动

在主要活动中,当我点击此按钮时,我有一个按钮,我将进入测试活动

在测试活动中

我希望应用程序自动将一些文本附加到textview,它每隔10秒就有一次

这个文字可以是例如“测试” 所以每10秒“测试”将被添加 但是,当我离开活动并进入主要活动时,这个过程将继续发生 所以,如果我在主活动上花了20秒然后返回测试活动,我会在textview中看到另外两个“测试”字符串..

我尝试用timertask做这件事并且根本没有成功

这是Test活动的代码,在主要活动中我只有一个按钮,向我显示其他活动

public class test2 extends Activity {
    /** Called when the activity is first created. */

    private TimerTask task;
    private Handler handler;
    private TextView tv;
    private Timer t;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.text1);

        t = new Timer();
        task = new TimerTask() {
            public void run() {
                handler.post(new Runnable() {
                    public void run() {
                        TextView tv = (TextView) findViewById(R.id.tv1);
                        tv.append("test");

                    }
                });

            }
        };
        t.schedule(task, 2000);
    }
}

当我点击主要活动的按钮以进入测试活动时,我收到以下错误:

                FATAL EXCEPTION: Timer-0
                java.lang.NullPointerException

提前致谢

2 个答案:

答案 0 :(得分:1)

如果你想实现一种从后台更新视图的方法,我建议切换到使用Service,而定时器可能会定期发送广播,主要活动可以使用{{{ 3}}。 TimerTask可以在后台服务的开始实现。

如果要在加载时立即更新测试类,您可以在服务上实现“更新”BroadcastReceiver,其功能是发送具有更新值的另一个广播。

这样,您就不必担心在您在活动之间切换时,您的测试活动会暂停(如果这就是您的目的)。

编辑:

这是一个非常好的教程,应该包含您需要的所有内容:

BroadcastReceiver

答案 1 :(得分:0)

没有知识应用程序崩溃的地方(即抛出nullPointerException的代码行),所有答案都不是很精确。

以下是我对您的问题的看法:

你致电findViewById(R.id.tv1)。当且仅当您的活动处于活动状态并且您的布局确实提供标识为tv1的文本视图时,才会返回正确的视图。我假设你的xml布局文件是正确的。我认为它可能需要做一些你用Timer调用这个方法的东西,它不需要对你的应用程序做任何事情。试试getApplication().findViewById(R.id.tv1)。这将确保findViewById搜索您设置xml布局的正确活动。

活动有自己的生命周期,请参阅here。这将导致问题,因为您的活动可能会被杀死,更新过程将失败。正如John指出的那样,Service或AlarmManager是你应该使用的东西。始终确保您不会经常唤醒CPU,因为这会导致电池耗尽。