gpt4 book ai didi

android - 某些设备中的 NullPointerException GoogleMaps

转载 作者:行者123 更新时间:2023-11-29 21:41:48 30 4
gpt4 key购买 nike

我有一个带有 GoogleMap v2 的应用程序。在我的设备 (Galaxy Nexus) 中工作正常,但在其他手机中它崩溃了,我不知道为什么。我的代码:

public class Activity_Maps extends android.support.v4.app.FragmentActivity {
private GoogleMap map = null;
//...

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_game);
setUpMapIfNeeded(); // Verify Google Maps and load it
//...
map.setMapType(GoogleMap.MAP_TYPE_SATELLITE); // HERE CRASH !!!!!!!!!
//...
}

private void setUpMapIfNeeded() {
if (map == null) {
if (isGoogleMapsInstalled()) {
map = ((SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map)).getMap();
Notification notification = new Notification(getBaseContext(),
"GoogleMaps", getResources().getString(
R.string.googlemaps_found));
notification.show();
} else {
dialogNeedGoogleMap();
}
} else {
Log.i(TAG, "map != null");
}
}

public boolean isGoogleMapsInstalled() {
try {
getPackageManager().getApplicationInfo(
"com.google.android.apps.maps", 0);
return true;
} catch (PackageManager.NameNotFoundException e) {
return false;
}
}

/*
* Go GooglePlay to install GoogleMap
*/
public void dialogNeedGoogleMap() {
final String MARKET = "market://details?id=com.google.android.apps.maps";
AlertDialog.Builder dialog = new AlertDialog.Builder(this);
dialog.setTitle(getResources().getString(
R.string.googlemaps_need1));
dialog.setMessage(getResources().getString(
R.string.googlemaps_need2));
dialogo.setCancelable(false);

dialog.setPositiveButton(getResources().getString(R.string.ok),
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri
.parse(MARKET));
startActivity(intent);
finish();
}
});

dialog.setNegativeButton(getResources().getString(R.string.cancel),
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
finish();
}
});
dialog.show();
}

我的 xml map :

<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.SupportMapFragment" />

我认为崩溃可能来自没有 GoogleMap 的设备,但在这种情况下应该显示一个对话框以提供安装或退出而不加载 map 的选项。在这种情况下,应显示一个对话框以提供安装或退出选项。

我从 GoogleAnalytics 捕获异常,它们都在行中:

 map.setMapType(GoogleMap.MAP_TYPE_SATELLITE);      

我可以捕捉到这个异常并显示 GoogleMaps 的对话框,但直到这里我才明白代码是如何产生的。在我的手机上它工作正常。

最佳答案

您做错了检查。使用 GooglePlayServicesUtil.isGooglePlayServicesAvailable而不是寻找不相关的应用程序。

然后放上这一行:

map.setMapType(GoogleMap.MAP_TYPE_SATELLITE);   // HERE CRASH !!!!!!!!!

在支票内部,而不是在支票执行之后。此代码将无条件执行,因此您将始终在未安装 Google Play 服务的设备上获得 NPE。

您也可以在自己的设备上进行测试。只需卸载 Google Play 服务即可。

关于android - 某些设备中的 NullPointerException GoogleMaps,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16871451/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com