Android 我的应用程序在onLocationChanged()后崩溃,

Android 我的应用程序在onLocationChanged()后崩溃,,android,locationmanager,Android,Locationmanager,这是我的位置Listener。。。我希望我的位置侦听器只获取城市一次,并将其存储到SharedReference中,然后我想将该位置用于其他目的。所有这些都很好,但过了一段时间它就会崩溃 loclistener = new LocationListener() { @Override public void onLocationChanged(Location location) { Geocoder gcd =

这是我的位置Listener。。。我希望我的位置侦听器只获取城市一次,并将其存储到SharedReference中,然后我想将该位置用于其他目的。所有这些都很好,但过了一段时间它就会崩溃

loclistener = new LocationListener() {
            @Override
            public void onLocationChanged(Location location) {

                Geocoder gcd = new Geocoder(getBaseContext(), Locale.getDefault());
                List<Address> addresses = null;
                try {
                    addresses = gcd.getFromLocation(location.getLatitude(), location.getLongitude(), 1);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                cityName = addresses.get(0).getLocality();
                //tvLoc.append("\n" + addresses.get(0).getLocality());
                tvLoc.setText(cityName);
                editor.putString(CITYNAME,cityName);
               // Toast.makeText(Emergencylist.this,"CityName saved :"+cityName, Toast.LENGTH_LONG).show();
                editor.commit();


            }

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

            }

            @Override
            public void onProviderEnabled(String provider) {

            }

            @Override
            public void onProviderDisabled(String provider) {

                Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                startActivity(intent);


            }
        };
loclistener=newlocationlistener(){
@凌驾
已更改位置上的公共无效(位置){
Geocoder gcd=新的地理编码器(getBaseContext(),Locale.getDefault());
列表地址=空;
试一试{
addresses=gcd.getFromLocation(location.getLatitude(),location.getLatitude(),1);
}捕获(IOE异常){
e、 printStackTrace();
}
cityName=addresses.get(0.getLocality();
//tvLoc.append(“\n”+地址.get(0.getLocation());
tvLoc.setText(城市名称);
editor.putString(CITYNAME,CITYNAME);
//Toast.makeText(Emergencylist.this,“CityName已保存:”+CityName,Toast.LENGTH_LONG.show();
commit();
}
@凌驾
public void onStatusChanged(字符串提供程序、int状态、Bundle extra){
}
@凌驾
公共无效onProviderEnabled(字符串提供程序){
}
@凌驾
公共无效onProviderDisabled(字符串提供程序){
意向意向=新意向(设置、动作、位置、来源、设置);
星触觉(意向);
}
};

此代码是危险的: 如果发生异常地址

 List<Address> addresses = null;
                try {
                    addresses = gcd.getFromLocation(location.getLatitude(), location.getLongitude(), 1);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                cityName = addresses.get(0).getLocality();
列表地址=null;
试一试{
addresses=gcd.getFromLocation(location.getLatitude(),location.getLatitude(),1);
}捕获(IOE异常){
e、 printStackTrace();
}
cityName=addresses.get(0.getLocality();
避免意外崩溃的解决方案:

     public void onLocationChanged(Location location) {

                    Geocoder gcd = new Geocoder(getBaseContext(), Locale.getDefault());
                    List<Address> addresses = null;
                    try {
                        addresses = gcd.getFromLocation(location.getLatitude(), location.getLongitude(), 1);
                    if((addresses && addresses.isEmpty()) || !addresses) { return; }
                    cityName = addresses.get(0).getLocality();
                    tvLoc.setText(cityName);                                         editor.putString(CITYNAME,cityName);                   
                    editor.commit();

                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
public void onLocation已更改(位置){
Geocoder gcd=新的地理编码器(getBaseContext(),Locale.getDefault());
列表地址=空;
试一试{
addresses=gcd.getFromLocation(location.getLatitude(),location.getLatitude(),1);
if((addresses&&addresses.isEmpty())| |!addresses){return;}
cityName=addresses.get(0.getLocality();
tvLoc.setText(cityName);editor.putString(cityName,cityName);
commit();
}捕获(IOE异常){
e、 printStackTrace();
}
}

附加错误PLZ是否存在堆栈跟踪?它到底在哪里崩溃?发布你的日志………它的android运行时异常onLocationChanged()@oleg Khilidov请共享您的日志。因此,如果列表为空,则
地址。get(0)
将崩溃。如果您可以帮助@MarkusThanku@Markus:,请提供什么解决方案,我犯了错误