Ошибка GPS Android - PullRequest
       1

Ошибка GPS Android

0 голосов
/ 08 января 2012

Я готовлю приложение, которое одним нажатием кнопки возвращает его текущие координаты 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;
                }

            }

Ответы [ 2 ]

1 голос
/ 08 января 2012

Я думаю, проблема в том, что когда вы звоните:

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

GPS еще не зафиксировал местоположение, а ваши широта и долгота еще не определены. Смысл использования слушателей заключается в том, что для исправления местоположения необходимо время, и эти методы не будут работать при вызове сразу после requestUpdates (). Я удивлен, что они сделали, когда ваши классы были объединены, может ли это быть, что ваш GPS уже включен и подключен к спутникам? В этом исключительном случае это будет работать.

Вместо этого именно в вашем onLocationChange (Изменение местоположения) должно быть инициировано действие в вашей активности, и оно может быть достигнуто с помощью обратного вызова.

Этот превосходный пост содержит хороший пример и класс, который вы можете использовать.

1 голос
/ 08 января 2012

у вас есть NullPointerException.Проверьте неинициализированные переменные

ОБНОВЛЕНИЕ:

Можете ли вы проверить с помощью отладчика, если mgr не ноль на линии mgr.requestLocationUpdates?

...