2012-01-08 8 views
0

私はボタンをクリックするだけで現在のGPS座標を取得するアプリケーションを準備しています。Android GPSエラー

メインアクティビティクラスにすべてのコードを配置すると、アプリケーションが完全に実行され、目的の結果が表示されました。

しかし、私はクラスを分割し、別のJavaクラスにGPS接続メソッドを配置し、主なアクティビティクラスから呼び出してみました。

私はコードを解析するために管理し、この部分が(テスト中に強制終了エラーを与える)問題を引き起こしていることを考え出し:

mgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 30000, 100,mlocListener); 

私が使用して管理していないよ、なぜ誰もが親切に説明することができますJavaクラス内のロケーションサービス。クリック方式で

01-08 02:21:30.589: I/ApplicationPackageManager(17978): cscCountry is not German : XEO 
01-08 02:21:51.499: D/AndroidRuntime(17978): Shutting down VM 
01-08 02:21:51.499: W/dalvikvm(17978): threadid=1: thread exiting with uncaught exception (group=0x40018578) 
01-08 02:21:51.509: E/AndroidRuntime(17978): FATAL EXCEPTION: main 
01-08 02:21:51.509: E/AndroidRuntime(17978): java.lang.NullPointerException 
01-08 02:21:51.509: E/AndroidRuntime(17978): at stefan.thesistest.Gpsconnection.connect(Gpsconnection.java:25) 
01-08 02:21:51.509: E/AndroidRuntime(17978): at stefan.thesistest.ThesistestActivity$1.onClick(ThesistestActivity.java:41) 
01-08 02:21:51.509: E/AndroidRuntime(17978): at android.view.View.performClick(View.java:2485) 
01-08 02:21:51.509: E/AndroidRuntime(17978): at android.view.View$PerformClick.run(View.java:9080) 
01-08 02:21:51.509: E/AndroidRuntime(17978): at android.os.Handler.handleCallback(Handler.java:587) 
01-08 02:21:51.509: E/AndroidRuntime(17978): at android.os.Handler.dispatchMessage(Handler.java:92) 
01-08 02:21:51.509: E/AndroidRuntime(17978): at android.os.Looper.loop(Looper.java:123) 
01-08 02:21:51.509: E/AndroidRuntime(17978): at android.app.ActivityThread.main(ActivityThread.java:3687) 
01-08 02:21:51.509: E/AndroidRuntime(17978): at java.lang.reflect.Method.invokeNative(Native Method) 
01-08 02:21:51.509: E/AndroidRuntime(17978): at java.lang.reflect.Method.invoke(Method.java:507) 
01-08 02:21:51.509: E/AndroidRuntime(17978): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 
01-08 02:21:51.509: E/AndroidRuntime(17978): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 
01-08 02:21:51.509: E/AndroidRuntime(17978): at dalvik.system.NativeStart.main(Native Method) 

主な活動クラス:

output = (TextView) findViewById(R.id.textView1); 
    button = (Button) findViewById(R.id.button1); 


    button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 


      Gpsconnection.connect(); 

      int test4 = Global.flag; 
      double test1 = Global.lat1; 
      double test2 = Global.lat2; 


      String tot = new Double(test1).toString(); 
      String tot2 = new Double(test2).toString(); 


      if(test4 == 2){ 
       output.setText("GPS IS NOT ON");     
      } 

      if(test4 ==3){ 
       output.setText("STILL WAITING CONECTION"); 

      } 
      if(test4 ==4){ 
       output.setText("Latitude:- " + tot 
         + '\n' + "Longitude:- " + tot2 
         + '\n'); 

      } 
     }; 

})。

Javaクラス(GPS検索方法):

public static void connect(){ 

    LocationManager mgr; 

     mgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     LocationListener mlocListener = new LocationManagerHelper(); 
     mgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 30000, 100,mlocListener); 


     if (mgr.isProviderEnabled(LocationManager.GPS_PROVIDER)) {// if gps is on 
      Global.flag=1; 
       Global.lat1 = LocationManagerHelper.getLatitude(); 
       Global.lat2 = LocationManagerHelper.getLongitude(); 

       if(Global.lat1 == 0.0 && Global.lat2 == 0.0){ 
        Global.flag=3; 
       } 
       else{Global.flag=4;} 
     } else { 
     Global.flag=2;//gps is off 

     } 

} 


public static class LocationManagerHelper implements LocationListener { 

       private static double latitude; 
       private static double longitude; 

       @Override    
       public void onLocationChanged(Location loc) { 

        latitude = loc.getLatitude(); 
        longitude = loc.getLongitude(); 
       } 

       @Override 
       public void onProviderDisabled(String provider) { } 

       @Override 
       public void onProviderEnabled(String provider) { } 

       @Override 
       public void onStatusChanged(String provider, int status, Bundle extras) { 
        // TODO Auto-generated method stub 
       } 

       public static double getLatitude() { 
        return latitude; 
       } 

       public static double getLongitude() { 
        return longitude; 
       } 

      } 
+0

あなたはログからスタックをポストすることができます – nandeesh

+0

thesistestActivityのonclickメソッドにNPEがあり、onclickメソッドも投稿してください – nandeesh

+0

複数のコード行が必要です...もっと投稿してください。 – Cody

答えて

1

あなたはNullPointerExceptionを持っています。 をチェックUPDATE変数

を初期化されていない:mgrはラインmgr.requestLocationUpdatesヌルでない場合

デバッガを使用して確認してくださいことはできますか?

1

は、私はこの問題は、あなたが呼び出すときということだと思う:

Global.lat1 = LocationManagerHelper.getLatitude(); 
Global.lat2 = LocationManagerHelper.getLongitude(); 

GPSはまだ場所が固定されていないし、あなたの緯度と経度がまだ定義されていません。リスナーを使用するポイントは、場所の修正を行うために時間が必要であり、requestUpdates()の直後に呼び出されたときにこれらのメソッドが機能しないことです。私はあなたのクラスが統合されたときに彼らがしたことに驚いています、あなたのGPSがすでに衛星に接続されていた可能性がありますか?その例外的な場合、それはうまくいくでしょう。

あなたのonLocationChange(場所の変更)では、アクティビティでアクションがトリガされなければならず、コールバックで達成できる必要があります。

This excellent postは、使用できる優れた例とクラスを提供します。

+0

あなたの問題を解決するのに役立ちましたか? – znat