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

Я использую Google Plus SDK в своем приложении для 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

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

  • кран-a702jоранжевый
  • MW0712
  • Планшет S (nbx03)
  • Пункт списка
  • Галактика Y (GT-S5360B)
  • Galaxy Y Duos (GT-S6102)
  • rk2928sdk
  • rk2928sdk
  • rk2928sdk
  • Галактика Примечание II (t03g)
  • Галакси мини (GT-S5570I)
  • e1901_v77_jdt1_9p017_fwvga
  • Nexus S (креспо)
  • Галактика Туз (GT-S5830i)
  • кран-инет
  • ИТП-R208W (rk30sdk)

person Regis_AG    schedule 21.11.2013    source источник
comment
Поскольку вы говорите, что это происходит не на всех устройствах, можете ли вы отредактировать свой вопрос и указать тип устройства, с которым у вас возникла проблема?   -  person BrettJ    schedule 23.11.2013
comment
Готово ! Спасибо за вашу помощь.   -  person Regis_AG    schedule 25.11.2013
comment
@Regis_AG Мы тоже видим много таких, вы когда-нибудь находили решение?   -  person Guy    schedule 11.05.2014
comment
Нет, не нашел источник проблемы. Кто-нибудь решил? Спасибо.   -  person Regis_AG    schedule 25.06.2014


Ответы (2)


Я получил отчет 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.

person Kai    schedule 02.12.2014
comment
Можно ли просто использовать обычный CTOR вместо надувания? Как вы думаете, это может помочь? Кроме того, как я могу сообщить об этом в Google? Нормальный сайт только для Android-кода, но не для Google-сервисов... - person android developer; 31.07.2015

Просто добавьте сервис plus play в свое приложение:

    compile 'com.google.android.gms:play-services-plus:10.0.1' 
person YTerle    schedule 08.12.2016