2013-08-20 3 views
0

В принципе, я не знаю, является ли это проблемой Eclipse или GPS моего телефона или кодом моего приложения.Исключить нулевой указатель Android GPS

Проблема: когда я пытаюсь перезапустить свой телефон и запускать свое приложение, он выходит из строя во время выполнения. Ошибка NullPointer (номер строки не указан). Но если я удалю две строки из onCreate(), которая проверяет наличие GPS и снова запускает приложение, это работает. Затем, если я снова добавлю эти строки, приложение работает. Таким образом, в принципе, код в порядке, но он сбой приложения, если он запускается в первый раз после перезагрузки телефона. Вот некоторые соответствующий код:

EDIT

Хорошо это то, что я сделал:

if (new LocTools(this).checkGPS() == true) { // new method, checks if Gps is active and returns boolean. 
     LatLng ll = new LocTools(this).getMyLocation(); 
     if (ll != null) { 
      Toast.makeText(this, "LatLng: "+ll, Toast.LENGTH_SHORT).show(); 
      // ll is NOT null 
      //LocTools.goToLocation(map,ll,5,true); 
     } else { 
      Toast.makeText(this, "Gps error", Toast.LENGTH_SHORT).show(); 
     } 
    } 

Я закомментировал LocTools.goToLocation линии и вставили Тост, чтобы увидеть, если LatLng был нулевым , Результат: это НЕ. Тогда я раскомментировал LocTools.goToLocation, так что код выглядит следующим образом:

 ... 
     if (ll != null) { 
      Toast.makeText(this, "LatLng: "+ll, Toast.LENGTH_SHORT).show(); 
      LocTools.goToLocation(map,ll,5,true); 
     } 
     ... 

И побежал приложение, и он разбился во время выполнения - NullPointer! Я не понимаю, почему он это делает. Существует NO NullPointer ...

+0

Во-первых, проверка равна нулю. Чем ты делаешь все, что хочешь. – Tugrul

+0

Хорошо, проблема кроется в методе LocTools.getMyLocation(). Я пытаюсь понять, почему, хотя GPS включен, LocationManager возвращает Null, когда приложение запускается после перезапуска. –

+0

Проверьте мой ответ. – Tugrul

ответ

0

Проблема: LatLng не NULL. При попытке переместить карту камеры в положение LatLng. Получено NullPointerException. Это казалось странным, поскольку не было разумного объяснения:

Решено: у меня AsyncTask выполняется из onCreate(). Чтобы разрешить NullPointerExeception, я должен включить команду moveCamera (в моем случае мой собственный метод LocTools.goToLocation()) должен находиться внутри Runnable. Например:

if (new LocTools(this).checkGPS() == true) { 
    Handler handler = new Handler(Looper.getMainLooper()); 
    handler.post(new Runnable() { 
     public void run() { 
      LocTools.goToLocation(map, new LocTools(getBaseContext()).getMyLocation(),5,true); 
     } 
    }); 
} 

Надеюсь, это поможет кому-то.

0

Возвращение по умолчанию вместо нуля.

public LatLng getMyLocation() { 
     final LocationManager manager = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE); 
     if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
      final AlertDialog.Builder builder = new AlertDialog.Builder(mContext); 
      builder.setTitle("GPS"); 
      builder.setIcon(R.drawable.gps); 
      builder.setMessage("Please enable GPS satellites then try again") 
       .setCancelable(false) 
       .setPositiveButton("GPS settings", new DialogInterface.OnClickListener() { 
        public void onClick(final DialogInterface dialog, final int id) { 
         mContext.startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS)); 
        } 
       }) 
       .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
        public void onClick(final DialogInterface dialog, final int id) { 
         dialog.cancel(); 
        } 
       }); 
      final AlertDialog alert = builder.create(); 
      alert.show(); 


return new LatLng(mock_lat,mock_lng); 

     } else { 
      LocationManager lm = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE); 
      Location l = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
      double lat = l.getLatitude(); 
      double lng = l.getLongitude(); 
      return new LatLng(lat,lng); 
     } 
    } 

ИЛИ

if (new LocTools(this).getMyLocation()!=null) { 
     LatLng ll = new LocTools(this).getMyLocation(); 
     LocTools.goToLocation(map,ll,3,true); 
    } 
+0

Просмотреть главное сообщение для обновления –

Смежные вопросы