Google Plus Android SDK: ошибка раздувания класса com.google.android.gms.plus.PlusOneButton

Я использую SDK Google Plus в своем приложении для Android. На некоторых редких устройствах я получил следующий сбой, когда мой просмотр с кнопками Google Plus завышен:

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // CRASH HERE .... } 

Мои кнопки GooglePlus находятся в xml следующим образом:

 <com.google.android.gms.common.SignInButton android:id="@+id/sign_in_button" .... /> <com.google.android.gms.plus.PlusOneButton xmlns:plus="http://schemas.android.com/apk/lib/com.google.android.gms.plus" android:id="@+id/plus_one_button" ... /> 

Ниже журнала. Любая идея на пути решения этой проблемы?

Благодаря !!

 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.audioguidia.myweather/com.audioguidia.myweather.MyWeatherActivity}: android.view.InflateException: Binary XML file line #111: Error inflating class com.google.android.gms.plus.PlusOneButton at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) at android.app.ActivityThread.access$600(ActivityThread.java:130) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4745) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) at dalvik.system.NativeStart.main(Native Method) Caused by: android.view.InflateException: Binary XML file line #111: Error inflating class com.google.android.gms.plus.PlusOneButton at android.view.LayoutInflater.createView(LayoutInflater.java:613) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687) at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) at android.view.LayoutInflater.inflate(LayoutInflater.java:489) at android.view.LayoutInflater.inflate(LayoutInflater.java:396) at android.view.LayoutInflater.inflate(LayoutInflater.java:352) at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:256) at android.app.Activity.setContentView(Activity.java:1867) at com.audioguidia.myweather.MyWeatherActivity.onCreate(MyWeatherActivity.java:419) at android.app.Activity.performCreate(Activity.java:5008) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023) ... 11 more Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Constructor.constructNative(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:417) at android.view.LayoutInflater.createView(LayoutInflater.java:587) ... 22 more Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x0 at android.content.res.Resources.getValue(Resources.java:1013) at android.content.res.Resources.getDrawable(Resources.java:658) at com.google.android.gms.plus.PlusOneDummyView$b.getDrawable(Unknown Source) at com.google.android.gms.plus.PlusOneDummyView.<init>(Unknown Source) at com.google.android.gms.internal.bu.a(Unknown Source) at com.google.android.gms.plus.PlusOneButton.d(Unknown Source) at com.google.android.gms.plus.PlusOneButton.<init>(Unknown Source) ... 25 more 

Примеры устройств, в которых у меня возникла проблема (это происходит только на нескольких устройствах каждого типа, иначе у меня было бы намного больше отчетов о сбоях):

  • Кран-a702jhorange
  • MW0712
  • Планшет S (nbx03)
  • Элемент списка
  • Galaxy Y (GT-S5360B)
  • Galaxy Y Duos (GT-S6102)
  • rk2928sdk
  • rk2928sdk
  • rk2928sdk
  • Galaxy Note II (t03g)
  • Galaxy Mini (GT-S5570I)
  • e1901_v77_jdt1_9p017_fwvga
  • Nexus S (креспо)
  • Galaxy Ace (GT-S5830i)
  • Кран-инет
  • ITP-R208W (rk30sdk)

Я получил отчет ACRA от rk2928sdk с тем же исключением. К счастью, я сохранял информацию из GooglePlayServicesUtil.isGooglePlayServicesAvailable(this) в отчете. Этот вызов вернулся SERVICE_INVALID .

Я использую PlusOneButton в очень простой «О программе», поэтому я решил дублировать это действие и удалить PlusOneButton со второго места. Теперь я InflateException и использую макет без кнопки, если исключение попадает.

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView; try { rootView = inflater.inflate(R.layout.activity_about, container, false); } catch (InflateException e) { rootView = inflater.inflate(R.layout.activity_about_fallback, container, false); } return rootView; } 

При try-catch можно заменить проверку, если .isGooglePlayServicesAvailable() возвращает нормальное значение. Но я не знаю, какие из этих возвращаемых значений гарантируют доступность PlusOneButton поэтому я оставлю его с уродливым try-catch .

Просто добавьте plus игровое приложение к вашему приложению:

  compile 'com.google.android.gms:play-services-plus:10.0.1'