在Genymotion上运行时,Google地图会出现NullPointer异常

时间:2013-10-09 17:44:37

标签: android nullpointerexception google-maps-api-2 genymotion

我是Android新手,我正在尝试在我的项目中使用Google地图。我的活动在ADT套件上的模拟器上运行得很好。但它真的很慢。当我在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)

1 个答案:

答案 0 :(得分:1)

在使用Play服务之前,您必须先将虚拟设备与Google帐户相关联。