android:如何每2秒将文本添加到另一个活动的TextView中
我有两个活动,一个是main,另一个是Test 在主活动中,我有一个按钮,当我单击此按钮时,我转到测试活动 在测试活动中,我希望应用程序每隔10秒自动向textview添加一些文本 此文本可以是例如“测试” 因此,每10秒将添加一次“测试” 但是,当我离开活动并转到主要活动时,这个过程将继续发生 例如,如果我在主活动上花费20秒,然后返回测试活动,我将在textview中看到另外两个“测试”字符串 我试着用timertask做这件事,但没有成功 这是测试活动的代码,在主活动中,我只有显示其他活动的按钮android:如何每2秒将文本添加到另一个活动的TextView中,android,Android,我有两个活动,一个是main,另一个是Test 在主活动中,我有一个按钮,当我单击此按钮时,我转到测试活动 在测试活动中,我希望应用程序每隔10秒自动向textview添加一些文本 此文本可以是例如“测试” 因此,每10秒将添加一次“测试” 但是,当我离开活动并转到主要活动时,这个过程将继续发生 例如,如果我在主活动上花费20秒,然后返回测试活动,我将在textview中看到另外两个“测试”字符串 我试着用timertask做这件事,但没有成功 这是测试活动的代码,在主活动中,我只有显示其他活动
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
提前感谢如果您想实现一种从后台更新视图的方法,我建议您改用a,使用计时器,可能会定期发送广播,主活动可以使用a访问广播。TimerTask可以在后台服务启动时实现 如果您想在加载测试类时立即更新它,您也可以在服务上实现一个“更新”
BroadcastReceiver
,其功能是发送另一个具有更新值的广播
这样,您就不必担心在活动之间切换时测试活动会暂停(如果这是您的目的的话)
编辑:
这是一个非常好的教程,应该包含您需要的所有内容:
如果您想实现一种从后台更新视图的方法,我建议改为使用,使用计时器可能会定期发送广播,主要活动可以使用。TimerTask可以在后台服务启动时实现 如果您想在加载测试类时立即更新它,您也可以在服务上实现一个“更新”
BroadcastReceiver
,其功能是发送另一个具有更新值的广播
这样,您就不必担心在活动之间切换时测试活动会暂停(如果这是您的目的的话)
编辑:
这是一个非常好的教程,应该包含您需要的所有内容:
如果不知道应用程序在何处崩溃(即引发nullPointerException的代码行),所有答案都不会非常精确
以下是我对你问题的看法:
您可以调用findviewbyd(R.id.tv1)
。当且仅当您的活动处于活动状态且您的布局确实提供id为tv1的文本视图时,此选项才会返回正确的视图。我假设您的xml布局文件是正确的。我认为它可能需要做一些事情,您可以在计时器之外调用这个方法,而这个计时器与您的应用程序无关。使用getApplication().findViewById(R.id.tv1)
进行尝试。这将确保findViewById在设置xml布局的正确活动中进行搜索
活动有自己的生命周期,请参阅。这将在以后导致问题,因为您的活动可能会被终止,并且更新过程将失败。正如John
所指出的,您应该使用服务或AlarmManager。始终确保不要太频繁地唤醒cpu,因为这会导致电池耗尽。如果不知道应用程序在哪里崩溃(即引发nullPointerException的代码行),所有答案都不会非常精确
以下是我对你问题的看法:
您可以调用findviewbyd(R.id.tv1)
。当且仅当您的活动处于活动状态且您的布局确实提供id为tv1的文本视图时,此选项才会返回正确的视图。我假设您的xml布局文件是正确的。我认为它可能需要做一些事情,您可以在计时器之外调用这个方法,而这个计时器与您的应用程序无关。使用getApplication().findViewById(R.id.tv1)
进行尝试。这将确保findViewById在设置xml布局的正确活动中进行搜索
活动有自己的生命周期,请参阅。这将在以后导致问题,因为您的活动可能会被终止,并且更新过程将失败。正如
John
所指出的,您应该使用服务或AlarmManager。始终确保不要太频繁地唤醒cpu,因为这会导致电池耗尽。是否在您提供的代码段中未看到的某个地方初始化了处理程序?harism,您是对的,但现在它只显示第一个“测试”字符串,而没有显示其他内容…Timer.scheduleAtFixedRate(..)如果你想让它在固定的时间间隔内重复,这可能就是你想要的。只要记住在活动被销毁之前取消它的执行,比如在Activity.ondestory()上。但正如John所指出的,我完全不确定这是否是您所追求的方法。handler
是否在您提供的代码片段中没有看到的地方初始化?harism,您是对的,但现在它只显示第一个“test”字符串,没有其他任何内容…Timer.scheduleAtFixedRate(…)如果你想让它在固定的时间间隔内重复,这可能就是你想要的。只要记住在活动被销毁之前取消它的执行,比如在Activity.ondestory()上。但是正如John所指出的,我完全不确定这是否是你想要的方法。嗨John谢谢你的回答,你有类似的例子吗?嗨js2,我用一个非常适合你文章的教程更新了我的答案。嗨John谢谢你的回答,你有类似的例子吗?H