2011-04-14 80 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