Android 为什么这个地图程序;意外停止;?

Android 为什么这个地图程序;意外停止;?,android,google-maps,latitude-longitude,Android,Google Maps,Latitude Longitude,我正在尝试编辑android开发者HelloLogleMaps教程中的google地图,并结合locationlistener和locationmanager,以便覆盖项所在的地理点(纬度、经度)将放置在我的当前位置。我是一个极端的android初学者,所以请帮助我简单的语言!!xD My SampleMap.java文件: package com.example.samplemap; import java.util.List; import android.con

我正在尝试编辑android开发者HelloLogleMaps教程中的google地图,并结合locationlistener和locationmanager,以便覆盖项所在的地理点(纬度、经度)将放置在我的当前位置。我是一个极端的android初学者,所以请帮助我简单的语言!!xD

My SampleMap.java文件:

    package com.example.samplemap;

        import java.util.List;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.OverlayItem;


        public class SampleMap extends MapActivity {
        /** Called when the activity is first created. */
        Location location;  
        @Override
        protected boolean isRouteDisplayed() {
        return false;
        }

        double lat = location.getLatitude();
        double lng = location.getLongitude();

        @Override
        public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        LocationListener ll = new mylocationlistener();
        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ll);

        MapView mapView = (MapView) findViewById(R.id.mapview);
        mapView.setBuiltInZoomControls(true);

        List<Overlay> mapOverlays = mapView.getOverlays();
        Drawable drawable = this.getResources().getDrawable(R.drawable.androidmarker);

        HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable);
        GeoPoint point = new GeoPoint((int) (lat), (int) (lng));
        OverlayItem overlayitem = new OverlayItem(point, "", "");

        itemizedoverlay.addOverlay(overlayitem);
        mapOverlays.add(itemizedoverlay);

        }

        private class mylocationlistener implements LocationListener {
            @Override
            public void onLocationChanged(Location location) {
                if (location != null) {
                Log.d("LOCATION CHANGED", location.getLatitude() + "");
                Log.d("LOCATION CHANGED", location.getLongitude() + "");
                Toast.makeText(SampleMap.this,
                    location.getLatitude() + " " + location.getLongitude(),
                    Toast.LENGTH_LONG).show();
                }
            }
            @Override
            public void onProviderDisabled(String provider) {
            }
            @Override
            public void onProviderEnabled(String provider) {
            }
            @Override
            public void onStatusChanged(String provider, int status, Bundle extras) {
            }

            }

        }

首先,看起来您正在尝试在初始化位置变量之前访问它,因为lon/lat和位置变量是类作用域,所以它们将在实际初始化位置之前初始化(如果是的话)

事实上,我甚至没有看到您正在初始化位置(您的更新中有同名的参数变量,但我看不到您将其移动到类范围的版本)

即使你做了类似的事情

this.location = new Location(location);
在监听器内部,您不知道何时会创建(甚至是否创建)

此外,谷歌地图还有一个内置的覆盖层,可以为您处理所有这些问题

更新 将位置变量放在顶部附近

改变

 double lat = location.getLatitude();
 double lng = location.getLongitude();

然后在你的位置监听器中放下双精度键,如果你这样做的话,你只是在创建一个本地的

 lat = location.getLatitude();
 lng = location.getLongitude();

这至少会解决这个问题,我会再次查看MyLocationOverlay的链接,它会为您解决有关当前位置的所有问题

您在Eclipse中这样做吗?你能从DDMS的角度发布Logcat的输出吗?哈哈,我不知道我应该使用哪个时间段…在你的Logcat上,你可以按“E”按钮只获取错误,这通常是有用的,而且控制台可能会显示stacktrace打印输出,这假设你使用的是Eclipse,这仍然不是。虽然如果你改变格式会有帮助!你说的类范围是什么意思?我指的是这个位置;在类的顶部,可用于任何方法,与此public void onLocationChanged(Location Location){仅在位置侦听器中可用。在实际初始化之前,您尝试使用类作用域-我在bitpublic void onLocationChanged(Location Location)上更新了答案{double lat=location.getLatitude();double lng=location.getLongitude();}我这样修改了它,但是它说lat和lng永远不会被读取。另外,在“GeoPoint((int)(lat),(int)(lng))中的lat和lng无法解析为变量。谢谢,它最终意外停止:D,但我需要将图标设置为当前所在位置…如果成功,我会通知您。
double lat = location.getLatitude(); // location is never set, it will be null! 
double lng = location.getLongitude();
public void onLocationChanged(Location location) { /
this.location = new Location(location);
 double lat = location.getLatitude();
 double lng = location.getLongitude();
 double lat = 0;
 double lng = 0;
 lat = location.getLatitude();
 lng = location.getLongitude();