IllegalStateException:无法使用Android执行活动的方法

时间:2014-02-06 07:42:46

标签: android

当我按下按钮(名为“当前位置”)时,它应显示文本视图上的当前地址(名为“tvAddress”),并且同时应在地图上放置一个标记。但它没有按预期工作。它给了我错误。错误如下。

错误是:

02-05 23:37:22.429: E/AndroidRuntime(20293): FATAL EXCEPTION: main
02-05 23:37:22.429: E/AndroidRuntime(20293): java.lang.IllegalStateException: Could not execute method of the activity
02-05 23:37:22.429: E/AndroidRuntime(20293):    at android.view.View$1.onClick(View.java:3680)
02-05 23:37:22.429: E/AndroidRuntime(20293):    at android.view.View.performClick(View.java:4191)
02-05 23:37:22.429: E/AndroidRuntime(20293):    at android.view.View$PerformClick.run(View.java:17229)
02-05 23:37:22.429: E/AndroidRuntime(20293):    at android.os.Handler.handleCallback(Handler.java:615)
02-05 23:37:22.429: E/AndroidRuntime(20293):    at android.os.Handler.dispatchMessage(Handler.java:92)
02-05 23:37:22.429: E/AndroidRuntime(20293):    at android.os.Looper.loop(Looper.java:137)
02-05 23:37:22.429: E/AndroidRuntime(20293):    at android.app.ActivityThread.main(ActivityThread.java:4960)
02-05 23:37:22.429: E/AndroidRuntime(20293):    at java.lang.reflect.Method.invokeNative(Native Method)
02-05 23:37:22.429: E/AndroidRuntime(20293):    at java.lang.reflect.Method.invoke(Method.java:511)
02-05 23:37:22.429: E/AndroidRuntime(20293):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
02-05 23:37:22.429: E/AndroidRuntime(20293):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
02-05 23:37:22.429: E/AndroidRuntime(20293):    at dalvik.system.NativeStart.main(Native Method)
02-05 23:37:22.429: E/AndroidRuntime(20293): Caused by: java.lang.reflect.InvocationTargetException
02-05 23:37:22.429: E/AndroidRuntime(20293):    at java.lang.reflect.Method.invokeNative(Native Method)
02-05 23:37:22.429: E/AndroidRuntime(20293):    at java.lang.reflect.Method.invoke(Method.java:511)
02-05 23:37:22.429: E/AndroidRuntime(20293):    at android.view.View$1.onClick(View.java:3675)
02-05 23:37:22.429: E/AndroidRuntime(20293):    ... 11 more
02-05 23:37:22.429: E/AndroidRuntime(20293): Caused by: java.lang.NullPointerException
02-05 23:37:22.429: E/AndroidRuntime(20293):    at com.mamun.tasktest.MapActivity.marker(MapActivity.java:129)
02-05 23:37:22.429: E/AndroidRuntime(20293):    ... 14 more

MapActivity.java

     package com.mamun.tasktest;

import java.io.IOException;
import java.util.ArrayList;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.provider.Settings;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesClient;
import com.google.android.gms.location.LocationClient;
import com.google.android.gms.location.LocationListener;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.GoogleMap.OnMarkerDragListener;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;

public class MapActivity extends Activity implements
GooglePlayServicesClient.ConnectionCallbacks,
GooglePlayServicesClient.OnConnectionFailedListener, LocationListener {

    private LocationManager manager;

    private TextView tvAddress;
     private Button btncurrent;
     private LocationClient locationClient;
     private GoogleMap googleMap;
     private MapFragment mapFragment;
    @Override
    protected void onCreate(Bundle savedInstanceState) {

        manager = (LocationManager) getSystemService(LOCATION_SERVICE);
        tvAddress = (TextView) findViewById(R.id.tvaddress);
        btncurrent= (Button)findViewById(R.id.btncurrent);



        super.onCreate(savedInstanceState);


        if (manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
            setContentView(R.layout.map);
        }

        else if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle("GPS is currently disabled");
            builder.setMessage("Please enable GPS to use this application.\nWould you like to enable GPS?");
            builder.setPositiveButton("Yes",
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Intent i = new Intent(
                                    Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                            startActivity(i);

                            setContentView(R.layout.map);
                            mapFragment = (MapFragment) getFragmentManager().findFragmentById(
                                    R.id.maps);
                             googleMap = mapFragment.getMap();


                        }

                    });

            builder.setNegativeButton("No",
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            finish();

                        }
                    });
            builder.create().show();

        }


    locationClient = new LocationClient(this, this, this);


    }

    public void marker(View v)
    {
        // add marker
                Location currentLocation = locationClient.getLastLocation();
                double lat = currentLocation.getLatitude();
                double lng = currentLocation.getLongitude();


                MarkerOptions options = new MarkerOptions()
                        .position(new LatLng(lat, lng))
                        .title("I am here")
                        .snippet("This is my current location")

                        .icon(BitmapDescriptorFactory
                                .defaultMarker(BitmapDescriptorFactory.HUE_AZURE));
                if (googleMap != null) {
                    googleMap.addMarker(options);
                } else {
                    Toast.makeText(getApplicationContext(), "Map is null",
                            Toast.LENGTH_LONG).show();
                }

                Geocoder geocoder = new Geocoder(this);

                try {
                    ArrayList<Address> addresses = (ArrayList<Address>) geocoder
                            .getFromLocation(currentLocation.getLatitude(),
                                    currentLocation.getLongitude(), 5);
                    Address addr = addresses.get(0);
                    tvAddress.setText(addr.getAddressLine(0) + "-"
                            + addr.getAdminArea() + "-" + addr.getCountryName());

                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        locationClient.connect();
    }
    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        locationClient.disconnect();
    }

    @Override
    public void onLocationChanged(Location location) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onConnectionFailed(ConnectionResult result) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onConnected(Bundle connectionHint) {

    }

    @Override
    public void onDisconnected() {
        // TODO Auto-generated method stub

    }






}

map.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
 <LinearLayout
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:orientation="vertical" >

    <EditText
        android:id="@+id/etSearch"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="Search your location" >

        <requestFocus />
    </EditText>

    <TextView
        android:id="@+id/tvaddress"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/btncurrent"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="marker"
            android:text="Current Location"
              android:layout_marginLeft="98dp" />

        <Button
            android:id="@+id/btnsave"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Save" />
    </LinearLayout>
    </LinearLayout>

    <FrameLayout
        android:id="@+id/map_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
         <fragment
            android:id="@+id/maps"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            class="com.google.android.gms.maps.MapFragment" />



    </FrameLayout>

</LinearLayout>

0 个答案:

没有答案