0

こんにちは私はアプリケーションを実行するたびに強制終了します..スプラッシュ画面を表示できますが、[現在地を検索]ボタンをクリックするとすぐに強制終了します....奇妙なことに気付いたのは私のgpsがオフになっているときはwi-fiで正常に動作します。マニフェストでも正しい権限を持っていることを確認しました。logcatを添付しました。これにより、エラーは23行目のMyLocOverlayクラスにあると思いますか?誰かがこれを修正するための正しい方向に私を向けてくれませんか?ありがとう

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: com.android.internal.view.IInputMethodClient$Stub$Proxy@44b033b8

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

2 に答える 2

1

あなたは適切な権限を持っていると言います。念のために言っておきますが、位置情報には 2 つの異なるアクセス許可があることをご存知ですか?

文字列 ACCESS_COARSE_LOCATION アプリケーションが大まかな位置 (Cell-ID、WiFi など) にアクセスできるようにします 文字列 ACCESS_FINE_LOCATION アプリケーションが詳細な位置 (GPS など) にアクセスできるようにします

Manifest.permission

于 2011-04-14T02:48:19.707 に答える
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)

私が推測しなければならないとしたら、あなたの場所はヌルだと思います。デバッグモードで実行してみて、何が見つかるかを確認してください。私の提案は、エラー行の前にブレークポイントを置き、変数が何であるかを確認することです。ロケーション変数がnullの場合、それが問題です。これを修正する方法は、取得するまでpingを続行することです。

解決策は、場所がnullかどうかを確認することです。nullの場合は、場所を再度リクエストする必要があることを意味します。20秒間pingを実行しても何も得られない場合は、何かが得られるまでpingを続けます。理想的には、5回の試行後にタイムアウトにする必要があります...これは、常にpingを実行すると、ユーザーがあなたを嫌うためです。でも; 100を過ぎても場所がわからない場合は、タイムアウトしてユーザーにその場所をもう一度リクエストするか、後でもう一度試すように依頼してください。

アップデート

具体的には、これでエラーが発生します。これが私がそれにアプローチする方法です:

場所をリクエストする->場所リスナーを介して場所を待つ->場所を受け取ったら、オーバーレイを更新します。

返された場所がnullである限り、要求を続けます。私が言ったようにタイムアウトします。

次に例を示します。

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

    };
于 2011-04-14T02:13:11.113 に答える