0

У меня есть java.lang.NullPointerException.java.lang.RuntimeException: Невозможно запустить Activity ComponentInfo: java.lang.NullPointerException

Я не могу найти проблему.

Приведенный ниже раздел.

public class GPSActivity extends MapActivity { 

    Location location; 
    EditText editTextLat, editTexLng, editTextAddress; 
    // overlay 
    Geocoder coder; 
    MapView mapview; 
    MapController controller; 
    MyItemizedOverlay itemizedOverlay; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.gps_layout); 
     mapview = (MapView) findViewById(R.id.mapview); 
     controller = mapview.getController(); 
     controller.setZoom(16); 
     MapOverlay mapOverlay = new MapOverlay(); 
     List<Overlay> listOfOverlays = mapview.getOverlays(); 
     listOfOverlays.add(mapOverlay); 
     Drawable drawable = getResources().getDrawable(R.drawable.ic_launcher); 
     itemizedOverlay = new MyItemizedOverlay(drawable); 
     listOfOverlays.add(itemizedOverlay); 
     coder = new Geocoder(this, Locale.KOREA); 
     editTextLat = (EditText) findViewById(R.id.editText1); 
     editTexLng = (EditText) findViewById(R.id.editText2); 
     editTextAddress = (EditText) findViewById(R.id.editText3); 

     LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 
     Criteria criteria = new Criteria(); 
     criteria.setAccuracy(Criteria.NO_REQUIREMENT); 
     criteria.setPowerRequirement(Criteria.NO_REQUIREMENT); 
     String provider = locationManager.getBestProvider(criteria, true); 
     location = locationManager.getLastKnownLocation(provider); 
     updateLocation(location.getLatitude(), location.getLongitude()); 
     locationManager.requestLocationUpdates(provider, 2000, 10, 
       mLocationListener);       } 

    private void updateLocation(double lat, double lng) { 
     String sLocationInfo = ""; 
     if (location != null) { 
      editTextLat.setText(String.valueOf(lat)); 
      editTexLng.setText(String.valueOf(lng)); 
      GeoPoint point = new GeoPoint((int) (lat * 1E6), (int) (lng * 1e6)); 
      controller.animateTo(point); 
      OverlayItem overlayItem = new OverlayItem(point, null, null); 
      itemizedOverlay.addOverlay(overlayItem);   try { 
       List<Address> addresses = coder.getFromLocation(lat, lng, 1); 
       if (addresses != null) { 
        Address addr = addresses.get(0); 
        for (int i = 0; i <= addr.getMaxAddressLineIndex(); i++) { 
         String addLine = addr.getAddressLine(i); 
         sLocationInfo += String.format("%s", addLine); 
        } 
       } 
      } catch (IOException e) { 
       Toast.makeText(getBaseContext(), "not found", Toast.LENGTH_SHORT).show(); 
      } 
      location.setLatitude(lat); 
      location.setLongitude(lng); 
     } else { 
      sLocationInfo = "cant found location"; 
     } 
     editTextAddress.setText(sLocationInfo); 
    } 

    LocationListener mLocationListener = new LocationListener() { 
     public void onLocationChanged(Location location) { // TODO 
                  // Auto-generated 
                  // method stub 
      updateLocation(location.getLatitude(), location.getLongitude()); 
     } 

     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 
     } 
    }; 

    @Override 
    protected boolean isRouteDisplayed() { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    class MapOverlay extends Overlay { 
     @Override 
     public boolean onTouchEvent(MotionEvent e, MapView mapView) { 
      // TODO Auto-generated method stub 
      if (e.getAction() == 1) { 
       GeoPoint point = mapView.getProjection().fromPixels(
         (int) e.getX(), (int) e.getY()); 
       updateLocation(point.getLatitudeE6()/1E6, 
         point.getLongitudeE6()/1E6); 
      } 
      return false; 
     } 
    } 

    class MyItemizedOverlay extends ItemizedOverlay<OverlayItem> { 
     private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>(); 

     public MyItemizedOverlay(Drawable defaultMarker) { 
      super(boundCenterBottom(defaultMarker)); 
      // TODO Auto-generated constructor stub 
     } 

     @Override 
     protected OverlayItem createItem(int i) { 
      // TODO Auto-generated method stub 
      return mOverlays.get(i); 
     } 

     @Override 
     public int size() { 
      // TODO Auto-generated method stub 
      return mOverlays.size(); 
     } 

     public void addOverlay(OverlayItem overlay) { 
      mOverlays.add(overlay); 
      populate(); 
     } 

    } 
} 

Адрес .

criteria.setAccuracy(Criteria.NO_REQUIREMENT); 

Эта строка делает исключение во время выполнения.

После того как я удалить эту строку,

Я также получил исключение во время выполнения на «updateLocation(location.getLatitude(), location.getLongitude()); »

Как я могу это исправить ?!

08-12 11:21:34.760: E/AndroidRuntime(2120): FATAL EXCEPTION: main 
08-12 11:21:34.760: E/AndroidRuntime(2120): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.lg.icou/com.lg.icou.GPSActivity}: java.lang.NullPointerException 
08-12 11:21:34.760: E/AndroidRuntime(2120):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
08-12 11:21:34.760: E/AndroidRuntime(2120):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
08-12 11:21:34.760: E/AndroidRuntime(2120):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
08-12 11:21:34.760: E/AndroidRuntime(2120):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
08-12 11:21:34.760: E/AndroidRuntime(2120):  at android.os.Handler.dispatchMessage(Handler.java:99) 
08-12 11:21:34.760: E/AndroidRuntime(2120):  at android.os.Looper.loop(Looper.java:137) 
08-12 11:21:34.760: E/AndroidRuntime(2120):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
08-12 11:21:34.760: E/AndroidRuntime(2120):  at java.lang.reflect.Method.invokeNative(Native Method) 
08-12 11:21:34.760: E/AndroidRuntime(2120):  at java.lang.reflect.Method.invoke(Method.java:511) 
08-12 11:21:34.760: E/AndroidRuntime(2120):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
08-12 11:21:34.760: E/AndroidRuntime(2120):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
08-12 11:21:34.760: E/AndroidRuntime(2120):  at dalvik.system.NativeStart.main(Native Method) 
08-12 11:21:34.760: E/AndroidRuntime(2120): Caused by: java.lang.NullPointerException 
08-12 11:21:34.760: E/AndroidRuntime(2120):  at com.lg.icou.GPSActivity.onCreate(GPSActivity.java:62) 
08-12 11:21:34.760: E/AndroidRuntime(2120):  at android.app.Activity.performCreate(Activity.java:5104) 
08-12 11:21:34.760: E/AndroidRuntime(2120):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
08-12 11:21:34.760: E/AndroidRuntime(2120):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
08-12 11:21:34.760: E/AndroidRuntime(2120):  ... 11 more 
+0

Какова ваша линия No.62 в GPSActivity.java – SilentKiller

+0

Какая линия GPSActivity.java:62? –

+0

Вы предоставили требуемые разрешения? – developerCoder

ответ

1
location = locationManager.getLastKnownLocation(provider); 

не гарантированно возвращает реальный результат, если нет последнего известного места доступно. Следовательно, исключение nullpointer.

0

Если проблема не в том, что местоположение может быть возвращено, то эта ошибка обычно указывает на то, что вы, возможно, пытаетесь получить доступ к представлению с действительным идентификатором, но на самом деле не находитесь в текущем макете. Возможно, попробуйте окружение с помощью try/catch, чтобы выяснить, какой вид вызывает проблемы.

try { 
    editTextLat = (EditText) findViewById(R.id.editText1); 
} catch (Exception e) { 
    Log.e("MyTag", "Error accessing view editText1", e); 
} 
0

Я думаю, что вы должны иметь эту линию:

locationManager.requestLocationUpdates(provider, 2000, 10, 
      mLocationListener); 

перед этим:

location = locationManager.getLastKnownLocation(provider); 

Насколько я знаю, вы не можете получить информацию о местоположении, если LocationListener не работая и выясняя вашу позицию.

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