有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java应用程序在尝试打开google地图时已停止

我正在开发一个移动应用程序,我对Android Studio还是个新手。在这个应用程序中,我需要使用谷歌地图。该应用程序在我的智能手机上运行良好,但当我点击按钮导航到谷歌地图页面时,会弹出一条消息,说我的应用程序已停止。有人能帮我解决这个问题吗

地图活性。爪哇

public class MapsActivity extends FragmentActivity implements
        OnMapReadyCallback,
        GoogleApiClient.ConnectionCallbacks,
        GoogleApiClient.OnConnectionFailedListener,
        LocationListener {

    private GoogleMap mMap;
    private GoogleApiClient client;
    private LocationRequest locationRequest;
    private Location lastlocation;
    private Marker currentLocationMarker;
    public static final int REQUEST_LOCATION_CODE = 99;

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

        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
        {
            checkLocationPermission();
        }

        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
        setUpMapIfNeeded();
    }

    protected void onResume() {
        super.onResume();
        setUpMapIfNeeded();
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        //super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        switch(requestCode)
        {
            case REQUEST_LOCATION_CODE:
                if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
                {
                    //permission is granted
                    if(ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED)
                    {
                        if(client == null)
                        {
                            buildGoogleApiClient();
                        }
                        mMap.setMyLocationEnabled(true);
                    }
                }
                else //permission is denied
                {
                    Toast.makeText(this, "Permission Denied!", Toast.LENGTH_LONG).show();
                }
                return;
        }
    }


    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;

        if(ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED)
        {
            buildGoogleApiClient();
            mMap.setMyLocationEnabled(true);
        }

        //DO WHATEVER YOU WANT WITH GOOGLEMAP
        mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        //mMap.setMyLocationEnabled(true);
        mMap.setTrafficEnabled(true);
        mMap.setIndoorEnabled(true);
        mMap.setBuildingsEnabled(true);
        mMap.getUiSettings().setZoomControlsEnabled(true);

        // Add a marker in Sydney and move the camera
        LatLng sydney = new LatLng(-34, 151);
        mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
        setUpMap();
    }


    private void setUpMapIfNeeded() {
        if (mMap == null) {
            SupportMapFragment mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map));
            mMap.getMapAsync(this);
            if (mMap != null) {
                setUpMap();
            }
        }
    }


    private void setUpMap() {
        mMap.addMarker(new MarkerOptions().position(new LatLng(3.188426, 101.682027)).title("This is my first marker"));
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
                != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
                != PackageManager.PERMISSION_GRANTED) {
            // TODO: Consider calling
            //    ActivityCompat#requestPermissions
            // here to request the missing permissions, and then overriding
            //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
            //
            mMap.setMyLocationEnabled(true);                                      //int[] grantResults)
            // to handle the case where the user grants the permission. See the documentation
            // for ActivityCompat#requestPermissions for more details.
            return;
        }

    }

    protected  synchronized void buildGoogleApiClient()
    {
        client = new GoogleApiClient.Builder(this)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API)
                .build();

        client.connect();
    }


    @Override
    public void onLocationChanged(Location location) {
        // latitude = location.getLatitude();
        //longiude = location.getLongitude();
        lastlocation = location;

        if (currentLocationMarker != null)
        {
            currentLocationMarker.remove();
        }

        LatLng latlng = new LatLng(location.getLatitude(), location.getLongitude());
        MarkerOptions markerOptions = new MarkerOptions();
        markerOptions.position(latlng);
        markerOptions.title("Current Location");
        markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE));

        currentLocationMarker = mMap.addMarker(markerOptions);

        mMap.moveCamera(CameraUpdateFactory.newLatLng(latlng));
        mMap.animateCamera(CameraUpdateFactory.zoomBy(10));

        if (client != null)
        {
            LocationServices.FusedLocationApi.removeLocationUpdates(client, this);
        }
    }

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

    }

    @Override
    public void onProviderEnabled(String provider) {

    }

    @Override
    public void onProviderDisabled(String provider) {

    }*/

    public void onClick (View v)
    {
        if(v.getId() == R.id.searchbtn)
        {
            EditText userlocation = (EditText)findViewById(R.id.userLocation);
            String location = userlocation.getText().toString();
            List<Address> addressList = null;
            MarkerOptions mo = new MarkerOptions();

            if( !location.equals(""))
            {
                Geocoder geocoder = new Geocoder(this);
                try
                {
                    addressList = geocoder.getFromLocationName(location, 5);
                }
                catch (IOException e)
                {
                    e.printStackTrace();
                }

                for(int i=0; i<addressList.size(); i++)
                {
                    Address myAddress = addressList.get(i);
                    LatLng latLng = new LatLng(myAddress.getLatitude(), myAddress.getLongitude());
                    mo.position(latLng);
                    mo.title("Your Search Result");
                    mMap.addMarker(mo);
                    mMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));
                }
            }

        }
    }

    @Override
    public void onConnected(@Nullable Bundle bundle) {
        locationRequest = new LocationRequest();

        locationRequest.setInterval(1000);
        locationRequest.setFastestInterval(1000);
        locationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);

        if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED)
        {
            LocationServices.FusedLocationApi.requestLocationUpdates(client, locationRequest, this);
        }

    }

    public boolean checkLocationPermission()
    {
        if(ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)
        {
            if(ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_FINE_LOCATION))
            {
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_LOCATION_CODE);
            }
            else
            {
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_LOCATION_CODE);
            }
            return false;
        }
        else
            return true;
    }

    @Override
    public void onConnectionSuspended(int i) {

    }

    @Override
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {

    }
}

AndroidManifest。xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
package="com.example.asus.autocare">

<!-- To auto-complete the email text field in the login form with the user's 
 emails -->
<uses-permission 安卓:name="安卓.permission.GET_ACCOUNTS" />
<uses-permission 安卓:name="安卓.permission.READ_PROFILE" />
<uses-permission 安卓:name="安卓.permission.READ_CONTACTS" />
<uses-permission 安卓:name="安卓.permission.INTERNET" />
<uses-permission 安卓:name="安卓.permission.ACCESS_NETWORK_STATE" />
<uses-permission 安卓:name = 
 "com.google.安卓.providers.gsf.permission.READ_GSERVICES" />
<uses-permission 安卓:name="安卓.permission.ACCESS_FINE_LOCATION" />
<uses-permission 安卓:name="安卓.permission.ACCESS_COARSE_LOCATION" />


<application
    安卓:allowBackup="true"
    安卓:icon="@mipmap/ic_launcher"
    安卓:label="@string/app_name"
    安卓:roundIcon="@mipmap/ic_launcher_round"
    安卓:supportsRtl="true"
    安卓:theme="@style/AppTheme">
    <activity 安卓:name=".MainActivity" />
    <activity 安卓:name=".LoginActivity" />
    <activity 安卓:name=".RegisterActivity" />
    <activity 安卓:name=".SplashScreen">
        <intent-filter>
            <action 安卓:name="安卓.intent.action.MAIN" />

            <category 安卓:name="安卓.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <meta-data
        安卓:name="com.google.安卓.geo.API_KEY"
        安卓:value="@string/google_maps_key" />
    <activity
        安卓:name=".MapsActivity"
        安卓:label="@string/title_activity_maps" />
    <activity 安卓:name=".ChooseActivity"></activity>
</application> </manifest>

这是我得到的错误:

05-02 21:11:10.236 30445-30445/? E/Zygote: v2
05-02 21:11:10.238 30445-30445/? E/Zygote: accessInfo : 0
05-02 21:11:12.271 30445-30445/com.example.asus.autocare E/BoostFramework: 
BoostFramework() : Exception_1 = java.lang.ClassNotFoundException: Didn't 
find class "com.qualcomm.qti.Performance" on path: 
DexPathList[[],nativeLibraryDirectories=[/system/lib, /vendor/lib]]
05-02 21:11:30.904 30445-30445/com.example.asus.autocare E/AndroidRuntime: 
FATAL EXCEPTION: main
Process: com.example.asus.autocare, PID: 30445
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.asus.autocare/com.example.asus.autocare.MapsActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.安卓.gms.maps.model.Marker com.google.安卓.gms.maps.GoogleMap.addMarker(com.google.安卓.gms.maps.model.MarkerOptions)' on a null object reference
    at 安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java:2984)
    at 安卓.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3045)
    at 安卓.app.ActivityThread.-wrap14(ActivityThread.java)
    at 安卓.app.ActivityThread$H.handleMessage(ActivityThread.java:1642)
    at 安卓.os.Handler.dispatchMessage(Handler.java:102)
    at 安卓.os.Looper.loop(Looper.java:154)
    at 安卓.app.ActivityThread.main(ActivityThread.java:6776)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1496)
    at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:1386)
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.安卓.gms.maps.model.Marker com.google.安卓.gms.maps.GoogleMap.addMarker(com.google.安卓.gms.maps.model.MarkerOptions)' on a null object reference
    at com.example.asus.autocare.MapsActivity.setUpMap(MapsActivity.java:147)
    at com.example.asus.autocare.MapsActivity.setUpMapIfNeeded(MapsActivity.java:140)
    at com.example.asus.autocare.MapsActivity.onCreate(MapsActivity.java:64)
    at 安卓.app.Activity.performCreate(Activity.java:6955)
    at 安卓.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126)
    at 安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java:2927)
    at 安卓.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3045) 
    at 安卓.app.ActivityThread.-wrap14(ActivityThread.java) 
    at 安卓.app.ActivityThread$H.handleMessage(ActivityThread.java:1642) 
    at 安卓.os.Handler.dispatchMessage(Handler.java:102) 
    at 安卓.os.Looper.loop(Looper.java:154) 
    at 安卓.app.ActivityThread.main(ActivityThread.java:6776) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1496) 
    at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:1386) 

共 (1) 个答案

  1. # 1 楼答案

    请尝试将这些行移到onmappled()中

    mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
    mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));