我正在尝试以 1 秒的固定间隔打印 GPS 传感器的纬度和经度值。我试图以最简单的方式做到这一点,并在下面包含我的基本代码(请忽略格式和变量名称。我的项目只是一个测试,看看我是否可以访问手机传感器)。
在
onCreate
方法中:
(我列出了所有必需的清单和运行时权限)
tv1 = (TextView) findViewById(R.id.tv1);
while(true)
{
System.out.println("in while");
//tv1.append("IN WHILE"); //PROBLEM 2
new CountDownTimer(1000, 500)
{
@SuppressLint("MissingPermission")
public void onFinish()
{
fusedLocationClient.getCurrentLocation(LocationRequest.QUALITY_HIGH_ACCURACY, cancellationTokenSource.getToken());
// addOnSuccessListener(this, new OnSuccessListener<Location>() {
// @Override
// public void onSuccess(Location location) {
// latitude = location.getLatitude();
// longitude = location.getLongitude();
// System.out.println("LOCATION ACQUIRED!!!!!!!");
// }
// }).addOnFailureListener(this, new OnFailureListener() {
// @Override
// public void onFailure(@NonNull Exception e) {
// System.out.println("LOCATION FAILED!!!!!!!!!");
// }
// });
System.out.println("in timer 2"); //PROBLEM 1
tv1.append("IN timer 2");
workGPS();
}
public void onTick(long millisUntilFinished)
{
// // millisUntilFinished The amount of time until finished.
}
}.start();
}
这里有两个问题:
“在计时器中”文本永远不会被打印。在日志或文本视图中。这告诉我倒数计时器可能没有进入。
注释行
tv1.append("IN WHILE");
抛出错误java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.append(java.lang.CharSequence)' on a null object reference
。
我认为问题2是我这边的一个错误——对一些概念的理解不够好。但我不确定问题 1。你能帮我理解我做错了什么吗?
问题1)
不是 100% 清楚,但是您的
while(true)
循环可能会阻塞主线程,因此 CountDownTimer
永远不会执行?
您可以尝试使用
Handler
,它每 X 毫秒发布一个可运行的内容。
handler = new Handler(Looper.getMainLooper());
runnable = new Runnable() {
@Override
public void run() {
fusedLocationClient.getLastLocation()
.addOnSuccessListener(new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
[...]
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
[...]
}
});
handler.postDelayed(this, 500);
}
};
handler.post(runnable);
不要忘记
handler.removeCallbacks(runnable)
当活动被破坏时
问题2)
我猜
tv1
未初始化。您在 setContentView
之前打电话给 findViewById
吗?