Я готовлю приложение, которое одним нажатием кнопки возвращает его текущие координаты GPS.
Когда я поместил все свои коды в основной класс активности, приложение выполнено отлично и желаемые результатыбыли показаны.
Однако я попытался разделить классы и поместить методы подключения GPS в отдельный класс Java и вызвать их из основного класса действий.
Мне удалось проанализировать код и вычислитьиз-за того, что эта часть вызывает проблему (выдает ошибку принудительного закрытия во время тестирования):
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;
}
}