简体   繁体   English

有人可以帮我解决这个Android位置错误吗?

[英]Can someone help me please with this android location error?

Hello I m new to programming and the android platform and I m developing an app using the Google Maps Api v2 and location services using Android Studio 1.02.Basically when someone launches the app, it will instantly zoom on it s users current location and i m encountering some weird problems on this.And By weird I mean it worked after I rad it on my device multiple times but after 2 days ( while i was out f town) I ran it again the app crashed on launch and this error apeared: 您好,我m new to programming and the android platform and I使用Google Maps Api v2开发了一个应用程序,并使用Android Studio 1.02开发了位置服务。基本上,当有人启动该应用程序时,它会立即放大其s users current location and i遇到一些奇怪的问题。怪异的是,它是在我多次将其放在我的设备上销售后才起作用的,但是两天后(当我不在城镇时),我再次运行它,该应用在启动时崩溃了,此错误消失了:

Is there a way to fix this ? 有没有办法解决这个问题 ?

Also how do you manage to put a actionBar in android studio 1.02 because I can`t figure a way to do it. 另外,您如何将actionBar放入android studio 1.02中,因为我找不到解决方法。

The Logcat: Logcat:

02-07 14:15:12.350 21921-21921/com.nanocat.viapp E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: com.nanocat.viapp, PID: 21921 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.nanocat.viapp/com.nanocat.viapp.MapsActivity}: java.lang.NullPointerException at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2305) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363) at android.app.ActivityThread.access$900(ActivityThread.java:161) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:157) at android.app.ActivityThread.main(ActivityThread.java:5356) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081) at dalvik.s 02-07 14:15:12.350 21921-21921 / com.nanocat.viapp E / AndroidRuntime:致命异常:主进程:com.nanocat.viapp,PID:21921 java.lang.RuntimeException:无法启动活动ComponentInfo {com。 nanocat.viapp / com.nanocat.viapp.MapsActivity}:java.lang.NullPointerException,android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2305),android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363),android .app.ActivityThread.access $ 900(ActivityThread.java:161)在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1265)在android.os.Handler.dispatchMessage(Handler.java:102)在android.os .Looper.loop(Looper.java:157)at android.app.ActivityThread.main(ActivityThread.java:5356)at java.lang.reflect.Method.invokeNative(本机方法)at java.lang.reflect.Method.invoke (Method.java:515)在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1265)在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)在dalvik。小号 ystem.NativeStart.main(Native Method) Caused by: java.lang.NullPointerException at com.nanocat.viapp.MapsActivity.setUpMap(MapsActivity.java:56) at com.nanocat.viapp.MapsActivity.setUpMapIfNeeded(MapsActivity.java:46) at com.nanocat.viapp.MapsActivity.onCreate(MapsActivity.java:28) at android.app.Activity.performCreate(Activity.java:5426) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2269) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363) at android.app.ActivityThread.access$900(ActivityThread.java:161) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:157) at android.app.ActivityThread.main(ActivityThread.java:5356) at java.lang.reflect.Method.invokeNative(Na ystem.NativeStart.main(本机方法)原因:com.nanocat.viapp.MapsActivity.setUpMapIfNeeded(MapsActivity.java:46)com.nanocat.viapp.MapsActivity.setUpMap(MapsActivity.java:56)处的java.lang.NullPointerException )在com.nanocat.viapp.MapsActivity.onCreate(MapsActivity.java:28)在android.app.Activity.performCreate(Activity.java:5426)在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)在android .app.ActivityThread.performLaunchActivity(ActivityThread.java:2269)在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363)在android.app.ActivityThread.access $ 900(ActivityThread.java:161)在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1265)在android.os.Handler.dispatchMessage(Handler.java:102)在android.os.Looper.loop(Looper.java:157)在android.app.ActivityThread.main( ActivityThread.java:5356),位于java.lang.reflect.Method.invokeNative(Na tive Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081) at dalvik.system.NativeStart.main(Native Method) 在com.android.internal.os上的com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1265)上的java.lang.reflect.Method.invoke(Method.java:515)上找到tive方法)。 ZygoteInit.main(ZygoteInit.java:1081)在dalvik.system.NativeStart.main(本机方法)

My MapsActivity class: 我的MapsActivity类:

package com.nanocat.viapp;

import android.content.Context;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationManager;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;


public class MapsActivity extends FragmentActivity {


    private GoogleMap mMap;
    double latitude;
    double longitude;

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

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


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

    public void setUpMap() {
        Criteria criteria = new Criteria();
        LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        String provider = locationManager.getBestProvider(criteria, true);
        Location myLocation = locationManager.getLastKnownLocation(provider);
        latitude = myLocation.getLatitude();
        longitude = myLocation.getLongitude();
        LatLng latLng = new LatLng(latitude, longitude);
        mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
        CameraPosition cameraPosition = new CameraPosition.Builder()
                  .target(latLng)
                  .tilt(60)
                  .zoom(17)
                  .build();
        mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));

    }
}

My Manifest.xml : 我的Manifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.nanocat.viapp" >

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />
        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="@string/google_maps_key" />

        <activity
            android:name=".MapsActivity"
            android:label="@string/title_activity_maps" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

And my Layout : 和我的布局:

<fragment
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/map"
    tools:context=".MapsActivity"
    android:name="com.google.android.gms.maps.SupportMapFragment" />

The problem is due of 问题是由于

Location myLocation = locationManager.getLastKnownLocation(provider);

getLastKnowLocation returns null if a location has not been yet acquired. 如果尚未获取位置,则getLastKnowLocation返回null。 So you should at least check against null Location objects 因此,您至少应检查空的Location对象

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM