2013-07-30 3 views
-4

Problème: Échec du lancement de l'activité sur le bouton, à partir de MainActiviy> MapActivity.Erreur lors du démarrage de l'activité (NullPointerException) sur Android Development

P/s: Je suis ce tutoriel de carte et de changer le nom de classe et de copier tous les éléments dans mon espace de travail de projet. This Tutorial

écouteur Bouton

public void onClick(View v) { 
       Intent intent = new Intent(getApplicationContext(), 
         MapActivity.class); 
       startActivity(intent);} 

Logcat:

07-31 02:22:58.267: E/AndroidRuntime(20784): FATAL EXCEPTION: main 
07-31 02:22:58.267: E/AndroidRuntime(20784): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.fa.financeassistant/com.fa.financeassistant.MapActivity}: java.lang.NullPointerException 
07-31 02:22:58.267: E/AndroidRuntime(20784): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2308) 
07-31 02:22:58.267: E/AndroidRuntime(20784): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358) 
07-31 02:22:58.267: E/AndroidRuntime(20784): at android.app.ActivityThread.access$600(ActivityThread.java:153) 
07-31 02:22:58.267: E/AndroidRuntime(20784): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247) 
07-31 02:22:58.267: E/AndroidRuntime(20784): at android.os.Handler.dispatchMessage(Handler.java:99) 
07-31 02:22:58.267: E/AndroidRuntime(20784): at android.os.Looper.loop(Looper.java:137) 
07-31 02:22:58.267: E/AndroidRuntime(20784): at android.app.ActivityThread.main(ActivityThread.java:5227) 
07-31 02:22:58.267: E/AndroidRuntime(20784): at java.lang.reflect.Method.invokeNative(Native Method) 
07-31 02:22:58.267: E/AndroidRuntime(20784): at java.lang.reflect.Method.invoke(Method.java:511) 
07-31 02:22:58.267: E/AndroidRuntime(20784): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795) 
07-31 02:22:58.267: E/AndroidRuntime(20784): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562) 
07-31 02:22:58.267: E/AndroidRuntime(20784): at dalvik.system.NativeStart.main(Native Method) 
07-31 02:22:58.267: E/AndroidRuntime(20784): Caused by: java.lang.NullPointerException 
07-31 02:22:58.267: E/AndroidRuntime(20784): at com.fa.financeassistant.MapActivity.onCreate(MapActivity.java:46) 
07-31 02:22:58.267: E/AndroidRuntime(20784): at android.app.Activity.performCreate(Activity.java:5104) 
07-31 02:22:58.267: E/AndroidRuntime(20784): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
07-31 02:22:58.267: E/AndroidRuntime(20784): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2262) 
07-31 02:22:58.267: E/AndroidRuntime(20784): ... 11 more 

Mon MapActivity classe

package com.fa.financeassistant; 

import java.util.ArrayList; 

import android.R.array; 
import android.app.ActionBar; 
import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.Context; 
import android.location.Criteria; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.widget.ArrayAdapter; 

import com.google.android.gms.maps.CameraUpdateFactory; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.MapFragment; 
import com.google.android.gms.maps.model.BitmapDescriptorFactory; 
import com.google.android.gms.maps.model.CameraPosition; 
import com.google.android.gms.maps.model.LatLng; 
import com.google.android.gms.maps.model.MarkerOptions; 


public class MapActivity extends Activity { 


    private final String TAG = getClass().getSimpleName(); 
    private GoogleMap mMap; 
    private String[] places; 
    private LocationManager locationManager; 
    private Location loc; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.mapactivity); 
     initCompo(); 
     places = getResources().getStringArray(R.array.places); 
     currentLocation(); 
     final ActionBar actionBar = getActionBar(); 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); 
     actionBar.setListNavigationCallbacks(ArrayAdapter.createFromResource(
       this, R.array.places, android.R.layout.simple_list_item_1), 
       new ActionBar.OnNavigationListener() { 

        @Override 
        public boolean onNavigationItemSelected(int itemPosition, 
          long itemId) { 
         Log.e(TAG, 
           places[itemPosition].toLowerCase().replace("-", 
             "_")); 
         if (loc != null) { 
          mMap.clear(); 
          new GetPlaces(MapActivity.this, 
            places[itemPosition].toLowerCase().replace(
              "-", "_").replace(" ", "_")).execute(); 
         } 
         return true; 
        } 

       }); 

    } 

    private class GetPlaces extends AsyncTask<Void, Void, ArrayList<Place>> { 

     private ProgressDialog dialog; 
     private Context context; 
     private String places; 

     public GetPlaces(Context context, String places) { 
      this.context = context; 
      this.places = places; 
     } 

     @Override 
     protected void onPostExecute(ArrayList<Place> result) { 
      super.onPostExecute(result); 
      if (dialog.isShowing()) { 
       dialog.dismiss(); 
      } 
      for (int i = 0; i < result.size(); i++) { 
       mMap.addMarker(new MarkerOptions() 
         .title(result.get(i).getName()) 
         .position(
           new LatLng(result.get(i).getLatitude(), result 
             .get(i).getLongitude())) 
         .icon(BitmapDescriptorFactory 
           .fromResource(R.drawable.pin)) 
         .snippet(result.get(i).getVicinity())); 
      } 
      CameraPosition cameraPosition = new CameraPosition.Builder() 
        .target(new LatLng(result.get(0).getLatitude(), result 
          .get(0).getLongitude())) // Sets the center of the map to 
              // Mountain View 
        .zoom(14) // Sets the zoom 
        .tilt(30) // Sets the tilt of the camera to 30 degrees 
        .build(); // Creates a CameraPosition from the builder 
      mMap.animateCamera(CameraUpdateFactory 
        .newCameraPosition(cameraPosition)); 
     } 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      dialog = new ProgressDialog(context); 
      dialog.setCancelable(false); 
      dialog.setMessage("Loading"); 
      dialog.isIndeterminate(); 
      dialog.show(); 
     } 

     @Override 
     protected ArrayList<Place> doInBackground(Void... arg0) { 
      PlacesService service = new PlacesService(
        "AIzaSyBquLw9vJPDHAZO8kzKw6ft0bPxsgBmblg"); 
      ArrayList<Place> findPlaces = service.findPlaces(loc.getLatitude(), // 28.632808 
        loc.getLongitude(), places); // 77.218276 

      for (int i = 0; i < findPlaces.size(); i++) { 

       Place placeDetail = findPlaces.get(i); 
       Log.e(TAG, "places : " + placeDetail.getName()); 
      } 
      return findPlaces; 
     } 

    } 

    private void initCompo() { 
     mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)) 
       .getMap(); 
    } 


    private void currentLocation() { 
     locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

     String provider = locationManager 
       .getBestProvider(new Criteria(), false); 

     Location location = locationManager.getLastKnownLocation(provider); 

     if (location == null) { 
      locationManager.requestLocationUpdates(provider, 0, 0, listener); 
     } else { 
      loc = location; 
      new GetPlaces(MapActivity.this, places[0].toLowerCase().replace(
        "-", "_")).execute(); 
      Log.e(TAG, "location : " + location); 
     } 

    } 

    private LocationListener listener = new LocationListener() { 

     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras) { 

     } 

     @Override 
     public void onProviderEnabled(String provider) { 

     } 

     @Override 
     public void onProviderDisabled(String provider) { 

     } 

     @Override 
     public void onLocationChanged(Location location) { 
      Log.e(TAG, "location update : " + location); 
      loc = location; 
      locationManager.removeUpdates(listener); 
     } 
    }; 

} 

SOLUTION: Autre que de la réponse donnée ci-dessous. J'applique une solution rapide en supprimant cette ligne et fonctionne comme un charme! Merci à tous ceux qui m'ont aidé. Passez une bonne journée :)

android:theme="@style/Theme.NoTitle" 
+0

À la ligne 46, qu'est-ce que c'est? – codeMagic

+0

Assurez-vous que 'getActionBar()' ne retourne pas 'null'. Ou prenez en compte le fait qu'il peut retourner null. – MAV

+0

Si j'ai compté, c'est 'actionBar.setNavigationMode (ActionBar.NAVIGATION_MODE_LIST);' - mettre un point d'arrêt sur cette ligne. Est-ce que actionBar est nul? – Simon

Répondre

1

Ligne 46 est;

actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); 

La seule chose qui peut être nul ici est actionbar donc getActionBar() est de retour nul, les raisons;

getActionBar() returns null - La barre de titre n'est pas visible.

getActionBar returns null - Vous devez demander une barre d'action en utilisant getWindow().requestFeature(Window.FEATURE_ACTION_BAR);, vous pensez que votre barre d'information est une barre d'action.

etc.

Vous devriez pouvoir trouver votre réponse à travers les nombreux autres SO messages poser la même question.

+0

Merci pour votre réponse rapide! Ça marche! Désolé de poser une question stupide dans ce site à nouveau. : P (Je suis très nouveau au développement et je ne sais pas que NULL pourrait causer ce problème.) – BlackHat

+0

À l'avenir, si vous obtenez une erreur de pointeur NULL, trouver la ligne de code où il se produit et sélectionnez tous les les variables dans cette instruction qui pourraient éventuellement être NULL, alors soit sur le point d'arrêt de cette ligne soit sur l'ajout de 'System.out' et vérifiez quelles variables sont nulles. Une fois que vous avez repéré la variable NULL, retracez-la à sa création et recherchez ensuite pourquoi elle est créée comme NULL. Cela vous aidera à résoudre la grande majorité des bugs de pointeurs NULL. – Robadob

Questions connexes