谷歌Android地图API V2 - NoSuchFieldError [英] Android Google Maps API v2 - NoSuchFieldError

查看:292
本文介绍了谷歌Android地图API V2 - NoSuchFieldError的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我工作的一个项目使用谷歌地图V2为Android和我得到一个 NoSuchFieldError 在实例上根深蒂固的HTC Desire HD在谷歌地图片段。

据我所知,这个问题不应该由谷歌造成的,而且不被安装在设备上的服务(事件虽然他们和其他应用程序中使用谷歌地图V2上班)。

我试图做一个检查,看看是否谷歌Play服务库安装在设备上(通过调用 GooglePlayServicesUtil.isGooglePlayServicesAvailable )之前设置活动的内容视图。

此外,应用程序运行在其他Android手机,地图片段成功地充气。

目前,我怀疑这个问题是由在Eclipse我的Andr​​oid项目设置造成的,因为谷歌Play服务库项目似乎并没有被包括在包装或部署过程中我的项目一起。

有没有人有,解决这一问题与谷歌地图只在某些设备上工作,别人抛 NoSuchFieldError 例外?如果是这样,我能做些什么来解决这个问题?

如果您需要更多的信息,如项目设置和/或code,请发表评论。

感谢您!

这是从ACRA JSON格式的堆栈跟踪报告:

{CUSTOM_DATA:'',
STACK_TRACE:java.lang.NoSuchFieldError:com.google.android.gms.R $ string.common_google_play_services_unsupported_text \\ n \\达com.google.android.gms.common.GooglePlayServicesUtil.b(来源不明)\\ n \\达com.google .android.gms.internal.bb.a(来源不明)\\ n \\达com.google.android.gms.internal.bb.onCreateView(来源不明)\\ n \\达com.google.android.gms.maps.SupportMapFragment .onCreateView(来源不明)\\ n \\达android.support.v4.app.Fragment.performCreateView(Fragment.java:1460)\\ n \\达android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:884) \\ n \\达android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1066)\\ n \\达android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1168)\\ n \\达机器人。 support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:280)\\ n \\达android.view.LayoutInflater.createViewFromTag(LayoutInflater.java)\\ n \\达android.view.LayoutInflater.rInflate(LayoutInflater.java)\\ n \\达android.view.LayoutInflater.inflate(LayoutInflater.java)\\ n \\达android.view.LayoutInflater.inflate(LayoutInflater.java)\\ n \\达android.view.LayoutInflater.inflate(LayoutInflater.java)\\ n \\达com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java)\\ n \\达android.app.Activity.setContentView(Activity.java)\\ n \\达ro.myapp.app.activities.MapActivity.onCreate( MapActivity.java:62)\
\\tat android.app.Activity.performCreate(Activity.java)\\ n \\达android.app.Instrumentation.callActivityOnCreate(Instrumentation.java)\\ n \\达android.app.ActivityThread.performLaunchActivity( ActivityThread.java)\\ n \\达android.app.ActivityThread.handleLaunchActivity(ActivityThread.java)\\ n \\达android.app.ActivityThread.access $ 600(ActivityThread.java)\\ n \\达android.app.ActivityThread $ H.handleMessage (ActivityThread.java)\\ n \\达android.os.Handler.dispatchMessage(Handler.java)\\ n \\达android.os.Looper.loop(Looper.java)\\ n \\达android.app.ActivityThread.main(ActivityThread的.java)\\ n \\达java.lang.reflect.Method.invokeNative(本机方法)\\ n \\达java.lang.reflect.Method.invoke(Method.java)\\ n \\达com.android.internal.os。 ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java)\\ n \\达com.android.internal.os.ZygoteInit.main(ZygoteInit.java)\\ n \\达dalvik.system.NativeStart.main(本机方法)\\ n,
PHONE_MODEL:HTC Desire HD的,
ANDROID_VERSION:'4.0.4'}

这是我的的onCreate 方法抛出异常:

  @覆盖
公共无效的onCreate(捆绑savedInstanceState)
{
    super.onCreate(savedInstanceState);    checkForPlayServices();    的setContentView(R.layout.activity_map);
    mapFragment =(SupportMapFragment)getSupportFragmentManager()findFragmentById(R.id.map)。
    地图= mapFragment.getMap();
    map.setMyLocationEnabled(真);
    map.setInfoWindowAdapter(本);
    map.setOnInfoWindowClickListener(本);
}

activity_map.xml 的内容布局:

 <的RelativeLayout的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    的xmlns:工具=htt​​p://schemas.android.com/tool​​s
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent
    工具:上下文=MapActivity。>    < ro.myapp.app.views.actionbar.ActionbarMap
        机器人:ID =@ + ID /动作条
        机器人:layout_width =match_parent
        机器人:layout_height =@扪/ myapp_actionbar_height/>    <片段
        机器人:ID =@ + ID /图
        机器人:layout_width =match_parent
        机器人:layout_height =FILL_PARENT
        机器人:layout_below =@ ID /动作条
        类=com.google.android.gms.maps.SupportMapFragment/>< / RelativeLayout的>


解决方案

  java.lang.NoSuchFieldError:com.google.android.gms.R $ string.common_google_play_services_unsupported_text

说,到底是什么问题。

在价值/ strings.xml中没有

 <字符串名称=common_google_play_services_unsupported_text> ...< /串>

定义。

我看到了我的谷歌播放-services_lib / RES定义这个值,所以你可能要检查是否正确添加这个库项目到工作区。好像你已经忘了更新库时,更新的strings.xml。

I am working on a project using Google Maps v2 for Android and I am getting a NoSuchFieldError while instantiating the Google map fragment on a rooted HTC Desire HD.

Afaik, the issue should not be caused by Google Play Services not being installed on the device (event though they are and other applications using Google Maps v2 are working).

I have tried making a check to see if Google Play Services library is installed on the device (by calling GooglePlayServicesUtil.isGooglePlayServicesAvailable) prior to setting the Activity's content view.

Furthermore, the application runs on other Android phones and the map fragment is successfully inflated.

At the moment I suspect that this issue is caused by my Android project setup in Eclipse, as the Google Play Services library project seems not to be included along with my project during packaging or deployment.

Has anyone had and solved this issue with Google Maps working only on some devices and throwing a NoSuchFieldError exception on others? If so, what can I do to solve this?

If you need more information such as project setup and/or code, please leave a comment.

Thank you!

This is the stack trace report from ACRA in JSON format:

{ 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' }

This is my onCreate method throwing the exception:

@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);
}

Contents of activity_map.xml layout:

<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> 

解决方案

java.lang.NoSuchFieldError: com.google.android.gms.R$string.common_google_play_services_unsupported_text

says exactly what is the problem.

In values/strings.xml there is no

<string name="common_google_play_services_unsupported_text">...</string>

defined.

I see this value defined in my google-play-services_lib/res, so you may want to check if you correctly added this library project to your workspace. Seems like you have forgot to update strings.xml when updating library.

这篇关于谷歌Android地图API V2 - NoSuchFieldError的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆