2011-04-14 47 views
0

嗨,我每次運行我的應用程序時都會收到一個關閉。它允許閃屏顯示,但只要點擊「查找我的位置」按鈕,它就會強制關閉。 ...我發現奇怪的是,當我的GPS關閉時,無線網絡可以正常工作。我已經檢查過,以確保我在清單中也有正確的權限。我附上了logcat。我是否假設這個錯誤是在23行MyLocOverlay類?有人請指出我正確的方向來解決這個問題嗎? 感謝當通過GPS尋找位置時,App Force會關閉

public class MyLocOverlay extends Overlay { 
    private final int Radius = 5; 

    @Override 
    public void draw(Canvas canvas, MapView mapView, boolean shadow) { 
     Projection projection = mapView.getProjection(); 
     if (shadow == false) { 
      // line below is line 23 
      Double lat = location.getLatitude()*1E6; 
      Double lng = location.getLongitude()*1E6; 
      GeoPoint geoPoint; geoPoint = new GeoPoint(lat.intValue(),lng.intValue()); 
     } 
    } 
} 

logcat的

04-14 02:41:30.332: INFO/ActivityManager(102): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.irwine.touristapplication/.SplashScreen } 

04-14 02:41:30.502: INFO/ActivityManager(102): Start proc com.irwine.touristapplication for activity com.irwine.touristapplication/.SplashScreen: pid=13759 uid=10060 gids={3003} 

04-14 02:41:31.012: WARN/Rosie(5927): mAddHtcWidgetByOtherActivity = false, mIsOpenSlideWhenLeaveLaunch = true 

04-14 02:41:31.012: WARN/InputManagerService(102): Ignoring hideSoftInput of: [email protected] 

04-14 02:41:31.132: WARN/InputManagerService(102): Got RemoteException sending setActive(false) notification to pid 13731 uid 10060 

04-14 02:41:31.322: INFO/ActivityManager(102): Displayed activity com.irwine.touristapplication/.SplashScreen: 834 ms (total 33041 ms) 

04-14 02:41:36.152: INFO/ActivityManager(102): Starting activity: Intent { cmp=com.irwine.touristapplication/.mainmenu } 

04-14 02:41:36.542: INFO/ActivityManager(102): Displayed activity com.irwine.touristapplication/.mainmenu: 337 ms (total 337 ms) 

04-14 02:41:40.152: INFO/ActivityManager(102): Starting activity: Intent { cmp=com.irwine.touristapplication/.gps } 

04-14 02:41:42.502: INFO/MapActivity(13759): Handling network change notification:CONNECTED 

04-14 02:41:42.502: ERROR/MapActivity(13759): Couldn't get connection factory client 

04-14 02:41:42.752: WARN/dalvikvm(13759): threadid=1: thread exiting with uncaught exception (group=0x40028a00) 

04-14 02:41:42.782: ERROR/AndroidRuntime(13759): FATAL EXCEPTION: main 

04-14 02:41:42.782: ERROR/AndroidRuntime(13759): java.lang.NullPointerException 

04-14 02:41:42.782: ERROR/AndroidRuntime(13759):  at com.irwine.touristapplication.MyLocOverlay.draw(MyLocOverlay.java:23) 

04-14 02:41:42.782: ERROR/AndroidRuntime(13759):  at com.google.android.maps.Overlay.draw(Overlay.java:179) 

04-14 02:41:42.782: ERROR/AndroidRuntime(13759):  at com.google.android.maps.OverlayBundle.draw(OverlayBundle.java:45) 

04-14 02:41:42.782: ERROR/AndroidRuntime(13759):  at com.google.android.maps.MapView.onDraw(MapView.java:494) 

04-14 02:41:42.782: ERROR/AndroidRuntime(13759):  at android.view.View.draw(View.java:6739) 

04-14 02:41:42.782: ERROR/AndroidRuntime(13759):  at android.view.ViewGroup.drawChild(ViewGroup.java:1648) 

04-14 02:41:42.782: ERROR/AndroidRuntime(13759):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1375) 

04-14 02:41:42.782: ERROR/AndroidRuntime(13759):  at android.view.ViewGroup.drawChild(ViewGroup.java:1646) 

04-14 02:41:42.782: ERROR/AndroidRuntime(13759):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1375) 

04-14 02:41:42.782: ERROR/AndroidRuntime(13759):  at android.view.View.draw(View.java:6742) 

04-14 02:41:42.782: ERROR/AndroidRuntime(13759):  at android.widget.FrameLayout.draw(FrameLayout.java:352) 

04-14 02:41:42.782: ERROR/AndroidRuntime(13759):  at android.view.ViewGroup.drawChild(ViewGroup.java:1648) 

04-14 02:41:42.782: ERROR/AndroidRuntime(13759):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1375) 

04-14 02:41:42.782: ERROR/AndroidRuntime(13759):  at android.view.ViewGroup.drawChild(ViewGroup.java:1646) 

04-14 02:41:42.782: ERROR/AndroidRuntime(13759):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1375) 

04-14 02:41:42.782: ERROR/AndroidRuntime(13759):  at android.view.View.draw(View.java:6742) 

04-14 02:41:42.782: ERROR/AndroidRuntime(13759):  at android.widget.FrameLayout.draw(FrameLayout.java:352) 

04-14 02:41:42.782: ERROR/AndroidRuntime(13759):  at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1872) 

04-14 02:41:42.782: ERROR/AndroidRuntime(13759):  at android.view.ViewRoot.draw(ViewRoot.java:1422) 

04-14 02:41:42.782: ERROR/AndroidRuntime(13759):  at android.view.ViewRoot.performTraversals(ViewRoot.java:1167) 

04-14 02:41:42.782: ERROR/AndroidRuntime(13759):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1744) 

04-14 02:41:42.782: ERROR/AndroidRuntime(13759):  at android.os.Handler.dispatchMessage(Handler.java:99) 

04-14 02:41:42.782: ERROR/AndroidRuntime(13759):  at android.os.Looper.loop(Looper.java:143) 

04-14 02:41:42.782: ERROR/AndroidRuntime(13759):  at android.app.ActivityThread.main(ActivityThread.java:4914) 

04-14 02:41:42.782: ERROR/AndroidRuntime(13759):  at java.lang.reflect.Method.invokeNative(Native Method) 

04-14 02:41:42.782: ERROR/AndroidRuntime(13759):  at java.lang.reflect.Method.invoke(Method.java:521) 

04-14 02:41:42.782: ERROR/AndroidRuntime(13759):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 

04-14 02:41:42.782: ERROR/AndroidRuntime(13759):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

04-14 02:41:42.782: ERROR/AndroidRuntime(13759):  at dalvik.system.NativeStart.main(Native Method) 

04-14 02:41:42.802: WARN/ActivityManager(102): Force finishing activity com.irwine.touristapplication/.gps 

04-14 02:41:42.812: WARN/ActivityManager(102): Force finishing activity com.irwine.touristapplication/.mainmenu 
04-14 
02:41:43.316: WARN/ActivityManager(102): Activity pause timeout for HistoryRecord{44eb0130 com.irwine.touristapplication/.gps} 

04-14 02:41:44.742: INFO/Process(13759): Sending signal. PID: 13759 SIG: 9 

04-14 02:41:44.752: INFO/WindowManager(102): WIN DEATH: Window{44b42110 com.irwine.touristapplication/com.irwine.touristapplication.mainmenu paused=true} 

04-14 02:41:44.762: INFO/ActivityManager(102): Process com.irwine.touristapplication (pid 13759) has died. 

04-14 02:41:44.772: INFO/WindowManager(102): WIN DEATH: Window{44b66298 com.irwine.touristapplication/com.irwine.touristapplication.gps paused=false} 

04-14 02:41:53.654: WARN/ActivityManager(102): Activity destroy timeout for HistoryRecord{44bd91e8 com.irwine.touristapplication/.mainmenu} 

04-14 02:41:53.699: WARN/ActivityManager(102): Activity destroy timeout for HistoryRecord{44eb0130 com.irwine.touristapplication/.gps} 
+0

請格式化該帖子,其硬性足以閱讀您的錯誤。 – JoxTraex 2011-04-14 02:11:14

+0

@IrishGal:「我是否認爲此錯誤在23行的MyLocOverlay類中?」 - 可能。發佈MyLocOverlay的代碼。 – Squonk 2011-04-14 02:11:46

+0

另外一個小代碼片段也會有所幫助... – JoxTraex 2011-04-14 02:11:59

回答

0

EXCEPTION: main 04-14 02:41:42.782: ERROR/AndroidRuntime(13759): java.lang.NullPointerException 

ERROR/AndroidRuntime(13759):  at com.irwine.touristapplication.MyLocOverlay.draw(MyLocOverlay.java:23) 

如果我猜的話,我會說,你的位置是空這是非常重要的。嘗試在調試模式下運行,看看你能找到什麼。我的建議是在錯誤行之前放置一個斷點,並查看變量是什麼。如果您的位置變量爲空,那是您的問題,解決此問題的方法是保持ping狀態,直到您獲得它爲止。

解決方案是檢查該位置是否爲空。如果它爲空,那麼這意味着您需要再次請求位置。如果你嘗試了幾十秒鐘並沒有得到任何東西,那麼繼續嘗試,直到你得到一些東西。理想情況下,你想要它在5次嘗試後超時... 這是因爲如果你經常ping用戶會恨你。然而;如果100秒通過並且您沒有找到位置,請超時並讓用戶再次請求該位置,或讓他們稍後再試。

UPDATE

具體而言,我看到與此錯誤。以下是我將如何處理它:

請求位置 - >通過位置偵聽器等待位置 - >一旦收到位置,然後更新覆蓋。

只要返回的位置爲空,就請求保持。像我說的那樣超時。

下面是一個例子:

我LocationListener的類:

public class myLocationListener implements LocationListener { 
     Location L; 

     public void onLocationChanged(Location arg0) { 
      Toast.makeText(getApplicationContext(), "Location has changed", 
        Toast.LENGTH_SHORT).show(); 
      L = arg0; 
      updateNewLocation(L); 
     }} 

功能我打電話:

public void updateNewLocation(Location loc) { 

     // while the location is not null get latitude and longitude 
     // information 
     // :: Null means that the GPS provider is off or there is an issue 
     if (loc != null) {}} 

函數體我使用要求的位置,超時一起:

Toast.makeText(getApplicationContext(), 
          "Searching for your location.", Toast.LENGTH_SHORT) 
          .show(); 
        locationManager.requestLocationUpdates(provider, 20000, 5, 
          locationListener); 

        // Thread to count until timeout (15 * 5000ms) 
        Thread t = new Thread(new Runnable() { 
         public void run() { 
          count = 0; 

          for (int i = 0; i < 15; i++) { 
           if (locationListener.L == null) { 
            try { 
             handler.sendMessage(handler 
               .obtainMessage()); 
             Thread.sleep(5000); 
            } catch (InterruptedException e) { 
             e.printStackTrace(); 
            } 
           } 

          } 

處理程序幫助超時

Handler handler = new Handler() { 
     @Override 
     public void handleMessage(Message msg) { 
      count++; 
      if (count == 15) { 
       error(); 
       count = 0; 
      } 
     } 

    }; 
+0

@JoxTraex我不明白如何位置可以是空的,因爲當我運行與gps關閉和wifi打開它,它修復了地圖上的位置..這已讓我困惑好幾個小時。抱歉上面的代碼片段 – IrishGal 2011-04-14 02:24:35

+0

發佈更新後檢查出來。 – JoxTraex 2011-04-14 02:29:28

+0

@@ JoxTraex:'ping'與通過GPS獲取位置有關? – Squonk 2011-04-14 02:35:28

1

你說你有權限。可以肯定的是,你知道有兩個不同的位置權限?

字符串ACCESS_COARSE_LOCATION允許應用程序訪問粗(例如,小區ID,無線網絡)的位置 字符串ACCESS_FINE_LOCATION允許應用程序訪問細(例如,GPS)的位置

Manifest.permission

+0

是的,我有兩個在,因爲我想用最好的提供商給我一個更準確的位置 – IrishGal 2011-04-14 02:52:27

+0

它不能是一個權限錯誤,它會抱怨日誌如果是這樣的話。好嘗試雖然:) – JoxTraex 2011-04-14 02:52:29