2014-02-21 3 views
0

GPS 위치 정보를 사용하여 Android 앱을 만들고 있는데,이를 위해 먼저 속도, 마지막 수정 시간, deltatime, 거리 등의 현지화 매개 변수를 표시해야합니다. 등등. 속도 문제는 없지만 textView에 getTime (0) 결과를 표시하려고하면 첫 번째 GPS 수정 사항을 얻은 직후 앱이 중단됩니다. 휴대 전화에서 실제 GPS 신호를 직접 테스트하는 중 스택보기를 얻는 방법을 모르겠습니다. GPX 데이터 파일을 통해 여행 시뮬레이션을 구성하는 데 어려움을 겪었습니다 (GPS 신호를 시뮬레이트하려고 할 때 에뮬레이터가 계속 다시 시작됨). 그래서 실제 휴대 전화에서 바로 작업하러갔습니다. 여기 GPS getTime() 결과를 표시하려고하는 Android가 앱을 크래시 함

문제에 대한 핵심 요소 :

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; 
     } 
} 

아무것도 너무 복잡 나는 가정,하지만 난 자바 프로그래밍에 아주 새로운 해요 (파스칼/델파이 프로그래밍에 년을 근무), 친절 I 어떤 도움을 요청합니다.

UPDATE : 나는, 17 분 API를 변경, getElapsedRealtimeNanos()에 기능을 변경 다른 VM에 교환 및 GPS 에뮬레이션을 실행 관리, 여전히 응용 프로그램이 충돌,하지만 지금은 적어도 나는 약간의 추적을 가지고

1 월 1 일부터의 밀리 세컨드 (긴)에서
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
getTime() 

반환이 수정 프로그램의 UTC 시간, 장치의 UTC 시간이 단조 아니라고 1970 년

참고 :이 앞이나 뒤로 이동할 수 있습니다 예기치 않게. 따라서 시간 델타를 계산할 때는 항상 getElapsedRealtimeNanos()를 사용하십시오.

반면에 getTime()은 사용자가 사람이 읽을 수있는 시간을 표시하거나 재부팅 또는 장치에서 신중하게 위치 픽스를 비교하는 데 유용합니다.

LocationManager에 의해 생성 된 모든 위치는 유효한 UTC 시간을 갖지만 위치 생성 이후 시스템 시간이 변경되었을 수 있습니다.

여전히 잘 모르겠 으면 오류 추적을 게시하여 도움을 받으십시오.

+0

답변 해 주셔서 감사 드리며 질문을 편집하여 새로운 정보로 업데이트하십시오. – user3336112