Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 当我单击OnMyLocation按钮时,应用程序崩溃_Android_Map_Nullpointerexception_Crash - Fatal编程技术网

Android 当我单击OnMyLocation按钮时,应用程序崩溃

Android 当我单击OnMyLocation按钮时,应用程序崩溃,android,map,nullpointerexception,crash,Android,Map,Nullpointerexception,Crash,出于某种原因,当我点击onmylocationbutton(谷歌地图功能)时,它崩溃了。我不明白为什么。我在网上查了一下logcat有什么问题,但由于某种原因我没能弄清楚。我应该在代码中更改什么 主要活动: import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import androi

出于某种原因,当我点击onmylocationbutton(谷歌地图功能)时,它崩溃了。我不明白为什么。我在网上查了一下logcat有什么问题,但由于某种原因我没能弄清楚。我应该在代码中更改什么

主要活动:

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.widget.DrawerLayout;
import android.widget.ListView;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMap.OnMyLocationButtonClickListener;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.model.LatLng;

public class MainActivity extends Activity {

    private String[] NavigationDrawerItems;
    private DrawerLayout mDrawerLayout;
    private ListView mDrawerList;
    private ActionBarDrawerToggle mDrawerToggle;
    private CharSequence mDrawerTitle;
    private CharSequence mTitle;

    public GoogleMap map;
    public Location location;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mainmap);

        mTitle = mDrawerTitle = getTitle();
        NavigationDrawerItems = getResources().getStringArray(
                R.array.navigationdraweritems);
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

        getActionBar().setDisplayHomeAsUpEnabled(true);
        getActionBar().setHomeButtonEnabled(true);

        // location stuff

        final GoogleMap map = ((MapFragment) getFragmentManager()
                .findFragmentById(R.id.map)).getMap();

        map.setMyLocationEnabled(true);

        // the location manager and the Criteria to find the right source for
        // location
        final LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        final Criteria criteria = new Criteria();
        // location manager
        final android.location.Location location = locationManager
                .getLastKnownLocation(locationManager.getBestProvider(criteria,
                        false));

        if (location != null) {
            map.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(
                    location.getLatitude(), location.getLongitude()), 10));
        }
        // class that gets the new location
        class NewLocation implements LocationListener {

            @Override
            public void onLocationChanged(Location location) {
                location.getLatitude();
                location.getLongitude();
            }

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

            @Override
            public void onProviderEnabled(String provider) {
            }

            @Override
            public void onProviderDisabled(String provider) {
            }
        }
        // end of the class the gets the new location

        map.setOnMyLocationButtonClickListener(new OnMyLocationButtonClickListener() {

            @Override
            public boolean onMyLocationButtonClick() {
                // if the Gps is off it openes a dialog to turn it off
                if (!locationManager
                        .isProviderEnabled(LocationManager.GPS_PROVIDER)) {
                    buildAlertMessageNoGps();
                } else {
                    // if it on, animates to the current position
                    map.animateCamera(CameraUpdateFactory.newLatLngZoom(
                            new LatLng(location.getLatitude(), location
                                    .getLongitude()), 15));
                    return false;
                }
                return false;
            }
        });
        // closes on create
    }
后面还有一些代码。但这与它无关,效果很好

我的日志:

06-04 13:29:30.566: E/AndroidRuntime(5036): FATAL EXCEPTION: main
06-04 13:29:30.566: E/AndroidRuntime(5036): java.lang.NullPointerException
06-04 13:29:30.566: E/AndroidRuntime(5036):     at nir.rauch.flantir.MainActivity$1.onMyLocationButtonClick(MainActivity.java:109)
06-04 13:29:30.566: E/AndroidRuntime(5036):     at com.google.android.gms.maps.GoogleMap$2.onMyLocationButtonClick(Unknown Source)
06-04 13:29:30.566: E/AndroidRuntime(5036):     at com.google.android.gms.maps.internal.m$a.onTransact(Unknown Source)
06-04 13:29:30.566: E/AndroidRuntime(5036):     at android.os.Binder.transact(Binder.java:347)
06-04 13:29:30.566: E/AndroidRuntime(5036):     at foj.a(SourceFile:81)
06-04 13:29:30.566: E/AndroidRuntime(5036):     at lxw.onClick(Unknown Source)
06-04 13:29:30.566: E/AndroidRuntime(5036):     at android.view.View.performClick(View.java:4475)
06-04 13:29:30.566: E/AndroidRuntime(5036):     at android.view.View$PerformClick.run(View.java:18786)
06-04 13:29:30.566: E/AndroidRuntime(5036):     at android.os.Handler.handleCallback(Handler.java:730)
06-04 13:29:30.566: E/AndroidRuntime(5036):     at android.os.Handler.dispatchMessage(Handler.java:92)
06-04 13:29:30.566: E/AndroidRuntime(5036):     at android.os.Looper.loop(Looper.java:137)
06-04 13:29:30.566: E/AndroidRuntime(5036):     at android.app.ActivityThread.main(ActivityThread.java:5419)
06-04 13:29:30.566: E/AndroidRuntime(5036):     at java.lang.reflect.Method.invokeNative(Native Method)
06-04 13:29:30.566: E/AndroidRuntime(5036):     at java.lang.reflect.Method.invoke(Method.java:525)
06-04 13:29:30.566: E/AndroidRuntime(5036):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
06-04 13:29:30.566: E/AndroidRuntime(5036):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
06-04 13:29:30.566: E/AndroidRuntime(5036):     at dalvik.system.NativeStart.main(Native Method)

可能您的findviewbyd在map变量中返回null

尝试使用MapView

MaoView mapView = (MapView) v.findViewById(R.id.map);
mapView.onCreate(savedInstanceState);
GoogleMap map = mapView.getMap();
map.setMyLocationEnabled(true);

@SimplePlan不会在这里崩溃map.setMyLocationEnabled(true);地图是否为空?从地图对象初始化中删除此“最终谷歌地图”位置对象是否为空?@Mighter不是按位置崩溃的@n您的Google play服务是否正确配置?请在
MainActivity.java
中指出第106行,但我的地图是作为片段,而不是视图。您不能将地图作为视图放在片段中吗?我认为这更正确。