-1

カスタム アプリを作成していますが、コードのメンテナンスを改善するために、さまざまな関数をさまざまなクラスのように分離したいと考えています。

現在、クラスMainActivityとクラスがGPSLocあります。MainActivityClass からメソッドを呼び出して緯度と経度を表示するボタンがありますがGPSLoc、残念ながら、ボタンを押すとすぐに がスローさNullPointExceptionれ、ここにGPSLocクラスがあり、メソッドをスタンドアロンでテストしましたが、正常に動作します.

 public void onClick(View v) {
    GPSLoc Test1=new GPSLoc();
    Test1.showCoordinate();
    }
});

ここにもLogCatがあります

07-07 19:04:24.730: E/AndroidRuntime(830): FATAL EXCEPTION: main
07-07 19:04:24.730: E/AndroidRuntime(830): java.lang.NullPointerException
07-07 19:04:24.730: E/AndroidRuntime(830):  at com.example.testnewbutton.GPSLoc.showCoordinate(GPSLoc.java:122)
07-07 19:04:24.730: E/AndroidRuntime(830):  at com.example.testnewbutton.MainActivity$1.onClick(MainActivity.java:53)
07-07 19:04:24.730: E/AndroidRuntime(830):  at android.view.View.performClick   (View.java:4204)
07-07 19:04:24.730: E/AndroidRuntime(830):  at android.view.View$PerformClick.run(View.java:17355)

ここに ShowCoordinate メソッドがあります

   public void showCoordinate ()



   {

    LocationManager manager = (LocationManager)mContext.getSystemService(Context.LOCATION_SERVICE);

       LocationListener ll=new MyLocationListener();
       manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ll);




       Location location=manager.getLastKnownLocation(LocationManager.GPS_PROVIDER);



       if (location != null) {
           String message = String.format(
                   "Current Location \n Longitude: %1$s \n Latitude: %2$s",
                   location.getLongitude(), location.getLatitude()

                   );

           {  Toast.makeText(mContext, message,Toast.LENGTH_LONG).show();}


       }









   }
4

1 に答える 1

0

以下のコードを使用します。パブリック クラス LocationListenerClass

{ プライベートな静的 LocationListenerClass インスタンス;

プライベートな静的コンテキスト コンテキスト。プライベート LocationManager myLocationManager; プライベート LocationListener myLocationListener; プライベート静的二重緯度 = 0d; プライベート静的二重経度 = 0d;

public static LocationListenerClass getInstance(Context context) {
    LocationListenerClass.context = context;
    if (null == instance) {
        instance = new LocationListenerClass();
    }
    return instance;
}

public void getCurrentLocation() {
    try {
        myLocationManager = (LocationManager) context
                .getSystemService(Context.LOCATION_SERVICE);
        myLocationListener = new MyLocationListener();
        myLocationManager.requestLocationUpdates(
                LocationManager.GPS_PROVIDER, 30000, 100,
                myLocationListener);

        Location location;
        location = myLocationManager
                .getLastKnownLocation(LocationManager.GPS_PROVIDER);

        if (location == null) {
            myLocationManager.requestLocationUpdates(
                    LocationManager.NETWORK_PROVIDER, 30000, 100,
                    myLocationListener);
            location = myLocationManager
                    .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
        }

        if (location != null) {
            try {
                latitude = location.getLatitude();
                Data.CURENT_LATITUDE = latitude;
                Log.v(ConstantLib.LOG, " latitude : "
                        + Data.CURENT_LATITUDE);
                longitude = location.getLongitude();
                Data.CURENT_LONGITUDE = longitude;
                Log.v(ConstantLib.LOG, " longitude : "
                        + Data.CURENT_LONGITUDE);

            } catch (Exception e) {
            }

        }
    } catch (Exception e) {
    }

}

public void removeLocationUpdates() {
    try {
        if (myLocationManager != null) {
            myLocationManager.removeUpdates(myLocationListener);
        }
    } catch (Exception e) {
    }
}

class MyLocationListener implements LocationListener {

    public void onLocationChanged(Location location) {

        try {
            if (location != null) {
                Data.CURENT_LATITUDE = location.getLatitude();
                Log.v(ConstantLib.LOG, "LOCATION CHANGED" + " latitude : "
                        + Data.CURENT_LATITUDE);
                longitude = location.getLongitude();
                Data.CURENT_LONGITUDE = location.getLongitude();
                Log.v(ConstantLib.LOG, "LOCATION CHANGED" + " longitude : "
                        + Data.CURENT_LONGITUDE);
            }
        } catch (Exception e) {

        }

    }

    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub

    }

    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub

    }

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

}

于 2013-07-08T09:22:23.833 に答える