我正在使用适用于 Android 的 Google Maps v2 开展一个项目,并且我正在花一些NoSuchFieldError
时间在有根的 HTC Desire HD 上实例化 Google 地图片段。
Afaik,这个问题不应该是由于设备上没有安装 Google Play 服务引起的(尽管它们已经安装并且其他使用 Google Maps v2 的应用程序正在运行)。
在设置的内容视图GooglePlayServicesUtil.isGooglePlayServicesAvailable
之前,我尝试检查设备上是否安装了 Google Play Services 库(通过调用)。Activity
此外,该应用程序可在其他 Android 手机上运行,并且地图片段已成功充气。
目前我怀疑这个问题是由我在 Eclipse 中设置的 Android 项目引起的,因为在打包或部署期间,Google Play 服务库项目似乎没有与我的项目一起包含。
有没有人解决了这个问题,谷歌地图只在某些设备上工作而在其他设备上抛出NoSuchFieldError
异常?如果是这样,我该怎么做才能解决这个问题?
如果您需要更多信息,例如项目设置和/或代码,请发表评论。
谢谢!
这是来自 ACRA 的 JSON 格式的堆栈跟踪报告:
{ CUSTOM_DATA: '',
STACK_TRACE: 'java.lang.NoSuchFieldError: com.google.android.gms.R$string.common_google_play_services_unsupported_text\n\tat com.google.android.gms.common.GooglePlayServicesUtil.b(Unknown Source)\n\tat com.google.android.gms.internal.bb.a(Unknown Source)\n\tat com.google.android.gms.internal.bb.onCreateView(Unknown Source)\n\tat com.google.android.gms.maps.SupportMapFragment.onCreateView(Unknown Source)\n\tat android.support.v4.app.Fragment.performCreateView(Fragment.java:1460)\n\tat android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:884)\n\tat android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1066)\n\tat android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1168)\n\tat android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:280)\n\tat android.view.LayoutInflater.createViewFromTag(LayoutInflater.java)\n\tat android.view.LayoutInflater.rInflate(LayoutInflater.java)\n\tat android.view.LayoutInflater.inflate(LayoutInflater.java)\n\tat android.view.LayoutInflater.inflate(LayoutInflater.java)\n\tat android.view.LayoutInflater.inflate(LayoutInflater.java)\n\tat com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java)\n\tat android.app.Activity.setContentView(Activity.java)\n\tat ro.myapp.app.activities.MapActivity.onCreate(MapActivity.java:62)\n\tat android.app.Activity.performCreate(Activity.java)\n\tat android.app.Instrumentation.callActivityOnCreate(Instrumentation.java)\n\tat android.app.ActivityThread.performLaunchActivity(ActivityThread.java)\n\tat android.app.ActivityThread.handleLaunchActivity(ActivityThread.java)\n\tat android.app.ActivityThread.access$600(ActivityThread.java)\n\tat android.app.ActivityThread$H.handleMessage(ActivityThread.java)\n\tat android.os.Handler.dispatchMessage(Handler.java)\n\tat android.os.Looper.loop(Looper.java)\n\tat android.app.ActivityThread.main(ActivityThread.java)\n\tat java.lang.reflect.Method.invokeNative(Native Method)\n\tat java.lang.reflect.Method.invoke(Method.java)\n\tat com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)\n\tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java)\n\tat dalvik.system.NativeStart.main(Native Method)\n',
PHONE_MODEL: 'HTC Desire HD',
ANDROID_VERSION: '4.0.4' }
这是我onCreate
抛出异常的方法:
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
checkForPlayServices();
setContentView(R.layout.activity_map);
mapFragment = (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map);
map = mapFragment.getMap();
map.setMyLocationEnabled(true);
map.setInfoWindowAdapter(this);
map.setOnInfoWindowClickListener(this);
}
activity_map.xml
布局内容:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MapActivity" >
<ro.myapp.app.views.actionbar.ActionbarMap
android:id="@+id/actionBar"
android:layout_width="match_parent"
android:layout_height="@dimen/myapp_actionbar_height" />
<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:layout_below="@id/actionBar"
class="com.google.android.gms.maps.SupportMapFragment" />
</RelativeLayout>