簡體   English   中英

Android Google Map V2-查找我的位置錯誤

[英]Android Google Map V2 - Find my location error

我正在嘗試檢索設備的位置,但是遇到了幾個問題:

我的LogCat:

07-21 22:23:34.072: E/AndroidRuntime(11634): FATAL EXCEPTION: main
07-21 22:23:34.072: E/AndroidRuntime(11634): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.Test.projecttest/com.Test.projecttest.MainActivity}: java.lang.NullPointerException
07-21 22:23:34.072: E/AndroidRuntime(11634):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2081)
07-21 22:23:34.072: E/AndroidRuntime(11634):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2106)
07-21 22:23:34.072: E/AndroidRuntime(11634):    at android.app.ActivityThread.access$700(ActivityThread.java:134)
07-21 22:23:34.072: E/AndroidRuntime(11634):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1217)
07-21 22:23:34.072: E/AndroidRuntime(11634):    at android.os.Handler.dispatchMessage(Handler.java:99)
07-21 22:23:34.072: E/AndroidRuntime(11634):    at android.os.Looper.loop(Looper.java:137)
07-21 22:23:34.072: E/AndroidRuntime(11634):    at android.app.ActivityThread.main(ActivityThread.java:4856)
07-21 22:23:34.072: E/AndroidRuntime(11634):    at java.lang.reflect.Method.invokeNative(Native Method)
07-21 22:23:34.072: E/AndroidRuntime(11634):    at java.lang.reflect.Method.invoke(Method.java:511)
07-21 22:23:34.072: E/AndroidRuntime(11634):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
07-21 22:23:34.072: E/AndroidRuntime(11634):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
07-21 22:23:34.072: E/AndroidRuntime(11634):    at dalvik.system.NativeStart.main(Native Method)
07-21 22:23:34.072: E/AndroidRuntime(11634): Caused by: java.lang.NullPointerException
07-21 22:23:34.072: E/AndroidRuntime(11634):    at com.Test.projecttest.MainActivity.setUpMap(MainActivity.java:82)
07-21 22:23:34.072: E/AndroidRuntime(11634):    at com.Test.projecttest.MainActivity.onCreate(MainActivity.java:71)
07-21 22:23:34.072: E/AndroidRuntime(11634):    at android.app.Activity.performCreate(Activity.java:5047)
07-21 22:23:34.072: E/AndroidRuntime(11634):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
07-21 22:23:34.072: E/AndroidRuntime(11634):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2045)
07-21 22:23:34.072: E/AndroidRuntime(11634):    ... 11 more

我的MainActivity.java代碼:

public class MainActivity extends FragmentActivity implements OnClickListener, LocationListener {

private GoogleMap map;

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        SupportMapFragment fmap = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
        map = fmap.getMap();
        setUpMap();
        }


    private void setUpMap() {
        map.setMyLocationEnabled(true);
        LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
        Criteria criteria = new Criteria();
        String provider = locationManager.getBestProvider(criteria, true);
        Location myLocation = locationManager.getLastKnownLocation(provider);
        map.setMapType(map.MAP_TYPE_HYBRID);
        double latitude = myLocation.getLatitude();
        double longitude = myLocation.getLongitude();
        LatLng latLng = new LatLng(latitude, longitude);
        map.moveCamera(CameraUpdateFactory.newLatLng(latLng));
        map.animateCamera(CameraUpdateFactory.zoomTo(20));
        map.addMarker(new MarkerOptions().position(new LatLng(latitude, longitude)).title("I'M HERE"));

    }
}

我也嘗試使用google.developer.com上的代碼,但是它過於混亂,無法真正理解大多數代碼,並且在我嘗試運行它們時出現錯誤。 我該怎么做才能解決這個問題? 評論被贊賞。 :)

locationManager.getLastKnownLocation(provider)的調用未阻止。 因此,不能保證您會立即獲得該位置。 這樣說,您的位置對象為null。

為了避免這種情況,您應該使用LocationListener onLocationChanged()回調來確保獲取有效位置。 此回調將盡快返回一個位置。

另一個事實是,如果您的應用程序從來沒有最后一個位置,那么您將不會獲得任何位置。 您首先必須調用requestForLocationUpdates()。

編輯:在文檔中有詳細描述。

您可以像這樣使用它:

requestLocationUpdates(提供者,minTimeForUpdates,minDistanceForUpdates,yourLocationListener);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM