我正在使用GPS本地化构建Android应用程序,为此我需要首先显示本地化参数,如速度,上次修复时间,deltatime,距离等等。速度没问题,但是当我尝试在textView中显示getTime(0)结果时,应用程序在获得第一个GPS修复后立即崩溃。 我不知道如何获得堆栈视图,因为我正在我的手机上测试应用程序,真正的GPS信号。我很难通过GPX数据文件配置旅程模拟(模拟器在我尝试模拟GPS信号时不断重启),所以我直接在真正的手机上工作。
以下是该问题的关键要素:
public void displayText(Integer input, double t1, double t0, int signal, int counter) {
tv.setText(String.valueOf(input));
t1tv.setText("t1 : "+String.valueOf(t1));
t0tv.setText("t0 : "+String.valueOf(t0));
signaltv.setText("Signal : "+signal);
countertv.setText("Counter : "+counter);
}
private class MyLocationListener implements LocationListener {
Integer counter = 0;
public void onLocationChanged(Location loc) {
if (loc != null) {
Integer fix=0;
Double speed = 0.0;
if (loc.hasSpeed()) {
speed = loc.getSpeed() * 1.0;
fix=2;
speed = speed * 3.6d;
displayText(speed.intValue(), loc.getTime(), 0.0, fix, counter);
//having the "loc.getTime()" sent to the displayText method is making the app crash.
}
else {
try {
// Here I have some other code, but it's irrelevant for the occasion as not used when the app chrashes. }
catch (NullPointerException e) {
}
}
counter = (counter + 1) % data_points;
}
}
我认为没有什么太复杂,但我对Java编程很新(在Pascal / Delphi编程工作多年),我很乐意向你寻求帮助。
更新: 我将函数更改为getElapsedRealtimeNanos(),将min API更改为17,交换到另一个VM并设法运行GPS仿真,仍然应用程序崩溃,但现在至少我有一些跟踪:
02-21 07:57:08.942: W/dalvikvm(1131): threadid=1: thread exiting with uncaught exception (group=0xb1a53ba8)
02-21 07:57:08.982: E/AndroidRuntime(1131): FATAL EXCEPTION: main
02-21 07:57:08.982: E/AndroidRuntime(1131): Process: com.the314.td, PID: 1131
02-21 07:57:08.982: E/AndroidRuntime(1131): java.lang.NullPointerException
02-21 07:57:08.982: E/AndroidRuntime(1131): at com.the314.td.testdrive$MyLocationListener.onLocationChanged(testdrive.java:308)
02-21 07:57:08.982: E/AndroidRuntime(1131): at android.location.LocationManager$ListenerTransport._handleMessage(LocationManager.java:279)
02-21 07:57:08.982: E/AndroidRuntime(1131): at android.location.LocationManager$ListenerTransport.access$000(LocationManager.java:208)
02-21 07:57:08.982: E/AndroidRuntime(1131): at android.location.LocationManager$ListenerTransport$1.handleMessage(LocationManager.java:224)
02-21 07:57:08.982: E/AndroidRuntime(1131): at android.os.Handler.dispatchMessage(Handler.java:102)
02-21 07:57:08.982: E/AndroidRuntime(1131): at android.os.Looper.loop(Looper.java:136)
02-21 07:57:08.982: E/AndroidRuntime(1131): at android.app.ActivityThread.main(ActivityThread.java:5017)
02-21 07:57:08.982: E/AndroidRuntime(1131): at java.lang.reflect.Method.invokeNative(Native Method)
02-21 07:57:08.982: E/AndroidRuntime(1131): at java.lang.reflect.Method.invoke(Method.java:515)
02-21 07:57:08.982: E/AndroidRuntime(1131): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
02-21 07:57:08.982: E/AndroidRuntime(1131): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
02-21 07:57:08.982: E/AndroidRuntime(1131): at dalvik.system.NativeStart.main(Native Method)
02-21 07:57:17.652: I/Process(1131): Sending signal. PID: 1131 SIG: 9
答案 0 :(得分:0)
getTime ()
返回此修复的UTC时间,自1970年1月1日起以毫秒(长)为单位。
请注意,设备上的UTC时间不是单调的:它可以无法预测地向前或向后跳跃。所以在计算时间增量时总是使用getElapsedRealtimeNanos()。
另一方面,getTime()对于向用户呈现人类可读时间或在重新启动或跨设备仔细比较位置修复时非常有用。
由LocationManager生成的所有位置都保证具有有效的UTC时间,但请记住,自生成位置以来系统时间可能已更改。
如果您仍然不确定,请发布错误跟踪,以便我可以更好地帮助您。