Android 我的应用程序在onLocationChanged()后崩溃,
这是我的位置Listener。。。我希望我的位置侦听器只获取城市一次,并将其存储到SharedReference中,然后我想将该位置用于其他目的。所有这些都很好,但过了一段时间它就会崩溃Android 我的应用程序在onLocationChanged()后崩溃,,android,locationmanager,Android,Locationmanager,这是我的位置Listener。。。我希望我的位置侦听器只获取城市一次,并将其存储到SharedReference中,然后我想将该位置用于其他目的。所有这些都很好,但过了一段时间它就会崩溃 loclistener = new LocationListener() { @Override public void onLocationChanged(Location location) { Geocoder gcd =
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:,请提供什么解决方案,我犯了错误