1

我是Android新手,我正在嘗試在我的項目中使用Google地圖。我的活動在ADT包上的模擬器上運行完美。但它真的很慢。當我在Genymotion上運行時,它會給出一個空指針異常。谷歌地圖在Genymotion上運行時給出NullPointer異常

@SuppressLint("NewApi") 
public class EditPlace extends Activity 
implements LocationListener 
{ 

    private boolean isEditMode=true; 
    private GoogleMap gmap; 

    final List<String> Rlist = new ArrayList<String>(); 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     /*final Spinner radius = (Spinner) findViewById(R.id.spinner);*/ 
     setContentView(R.layout.activity_edit_place); 

     populate(); 
     final Serializable extra = getIntent().getSerializableExtra("Place"); 
     final EditText pName = (EditText)findViewById(R.id.editText1); 

     gmap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap(); 
     gmap.setMyLocationEnabled(true); 
     gmap.setMapType(GoogleMap.MAP_TYPE_NORMAL); 
     gmap.setOnMapLongClickListener(onLongClickMapSettins()); 
     final Button saveButton = (Button)findViewById(R.id.button2); 
     Myplace Place = (Myplace)extra; 



     if(extra!=null) 
     { 
      isEditMode=false; 
      pName.setText(Place.getTitle()); 
      radius.setSelection(Place.getIdLocation().getRadius()); 
      final LatLng curPlace = new LatLng(Place.getIdLocation().getX(), Place.getIdLocation().getY()); 
      marker = gmap.addMarker(new MarkerOptions().position(curPlace)); 
      CameraUpdate camup = CameraUpdateFactory.newLatLngZoom(curPlace, 16); 
      gmap.animateCamera(camup); 
      pName.setEnabled(false); 
      radius.setEnabled(false); 
      gmap.setOnMapLongClickListener(null); 
      saveButton.setText("Edit"); 
     } 


     saveButton.setOnClickListener(new OnClickListener(){ 
      @SuppressWarnings("deprecation") 
      @Override 
      public void onClick(View v) { 
       if(isEditMode==false) 
       { 
        gmap.setOnMapLongClickListener(onLongClickMapSettins()); 
        pName.setEnabled(true); 
        radius.setEnabled(true); 
        isEditMode=true; 
        if(marker!=null) marker.remove(); 
        marker=null; 
        saveButton.setText("Save"); 
        } 
       else 
       { 
       if(marker == null) { 
        warnMzg(); 
        return;} 
       else{ 

       /*System.out.println(name.getText().toString());*/ 

       double lat = marker.getPosition().latitude; 
       double lng = marker.getPosition().longitude; 
       /*System.out.println(lat); 
       System.out.println(lng); 

       System.out.println(radius.getSelectedItem());*/ 
       int Radius = radius.getSelectedItemPosition(); 

       location loc = new location(); 
       loc.setX(lat); 
       loc.setY(lng); 
       loc.setRadius(Radius); 

       Myplace newPlace = new Myplace(); 
       newPlace.setTitle(pName.getText().toString()); 
       newPlace.setIdLocation(loc); 

       System.out.println(newPlace.getTitle()); 
       System.out.println(newPlace.getIdLocation().getX()); 
       System.out.println(newPlace.getIdLocation().getY()); 
       System.out.println(newPlace.getIdLocation().getRadius());} 
       // TODO Auto-generated method stub 

      }} 


     });} 
     /*gmap.addMarker(new MarkerOptions().position(ucsc));*/ 

     /*gmap.setOnMapClickListener((OnMapClickListener) this);*/ 




    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.edit_place, menu); 

     return true; 
     } 



    /*public void onCilck_clear(View view){ 
     CameraUpdate camup = CameraUpdateFactory.newLatLngZoom(ucsc, 16); 
     gmap.animateCamera(camup); 
    }*/ 



private void warnMzg() { 
    AlertDialog.Builder alert = new AlertDialog.Builder(this); 
    alert.setTitle("No Location Selected"); 
    alert.setMessage("Please hold and select a point on the map"); 
    alert.setPositiveButton("OK",null); 
    alert.show(); 
} 
    public static Spinner radius; 


     public void populate() { 
      radius = (Spinner) findViewById(R.id.spin1); 
      Rlist.add("50"); 
      Rlist.add("100"); 
      Rlist.add("200"); 
      ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
        android.R.layout.simple_list_item_1, android.R.id.text1, Rlist); 
      radius.setAdapter(adapter); 

    }  

    public static Marker marker=null; 

    public OnMapLongClickListener onLongClickMapSettins(){ 

     return new OnMapLongClickListener(){ 

      @Override 
      public void onMapLongClick(LatLng pos) { 
       // TODO Auto-generated method stub 
       if(marker!=null) marker.remove(); 
       marker=null; 
       marker = gmap.addMarker(new MarkerOptions().position(pos)); 
       Log.i(pos.toString(), "User Long Clicked"); 

      } 

     }; 

    } 

這是佈局

 <fragment 
    android:id="@+id/map" 
    android:name="com.google.android.gms.maps.MapFragment" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_above="@+id/editText1" /> 



    <Button 
     android:id="@+id/button2" 
     android:layout_width="90dp" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:onClick="onClick_save" 
     android:text="@string/save" /> 



    <EditText 
     android:id="@+id/editText1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:ems="10" 
     android:inputType="text" 
     android:hint="@string/Name" 
     android:layout_above="@+id/spin1" /> 

    <TextView 
     android:id="@+id/textView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_above="@+id/button2" 
     android:layout_alignParentLeft="true" 
     android:layout_marginBottom="22dp" 
     android:text="@string/radius" /> 

    <Spinner 
     android:id="@+id/spin1" 
     android:layout_width="220dp" 
     android:layout_height="50dp" 
     android:layout_alignParentRight="true" 
     android:layout_above="@+id/button2" /> 

這是錯誤的logcat給:

10-09 14:03:09.013: E/AndroidRuntime(1727): FATAL EXCEPTION: main 
10-09 14:03:09.013: E/AndroidRuntime(1727): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ucsc.loctip/com.ucsc.loctip.EditPlace}: java.lang.NullPointerException 
10-09 14:03:09.013: E/AndroidRuntime(1727):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
10-09 14:03:09.013: E/AndroidRuntime(1727):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
10-09 14:03:09.013: E/AndroidRuntime(1727):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
10-09 14:03:09.013: E/AndroidRuntime(1727):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
10-09 14:03:09.013: E/AndroidRuntime(1727):  at android.os.Handler.dispatchMessage(Handler.java:99) 
10-09 14:03:09.013: E/AndroidRuntime(1727):  at android.os.Looper.loop(Looper.java:137) 
10-09 14:03:09.013: E/AndroidRuntime(1727):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
10-09 14:03:09.013: E/AndroidRuntime(1727):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-09 14:03:09.013: E/AndroidRuntime(1727):  at java.lang.reflect.Method.invoke(Method.java:511) 
10-09 14:03:09.013: E/AndroidRuntime(1727):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
+0

某些genymotion android版不喜歡運行地圖。我可以在4.1上運行一個應用程序,但在4.2上它會崩潰 – tyczj

+0

您是否下載了「使用Google Apps」的模擬器並安裝了Google Play服務應用程序? –

+0

我在4.1和4.2上都試過,但沒用。這兩款設備都使用Google Apps。 – paarandika

回答

1

看起來,你必須使用播放之前,你的虛擬設備與谷歌帳戶連接服務。