2014-11-25 1 views
1

Существует множество вопросов об этой проблеме, но ни одно исправление, о котором я читал, похоже, работает.RuntimeException и InflateException: двоичная строка XML-файла # 7 .., за которой следует ClassCastException

исправления, которые не кажется, работают:

Fix 1: Android - InflateException: Binary XML file line #7

Fix 2: InflateException Binary XML file at line #7: Error inflating class fragment

Описание моей проблемы:

Я пытаюсь включить в SliderView в моем изделия из стекла. SliderView может использоваться как пользовательский экран загрузки.

1. Link I found - 2. Google Review Team Proposed Link

настоящее время я использую первую ссылку.

Во время моей заявки я звоню SearchActivity.java, который делает несколько вещей. Я заметил большую часть кода, чтобы увидеть проблему и, кажется, проблема впервые появляется здесь:

protected void onCreate(Bundle bundle) { 

     super.onCreate(bundle); 
     setContentView(R.layout.activity_main); 
} 

Вот что можно найти в моем activity_main.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" 
    android:background="@android:color/black"> 

<!-- The line right under is line number 7 --> 
    <com.google.android.glass.sample.apidemo.card.SliderView 
     android:id="@+id/indeterm_slider" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" /> 


    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:contentDescription="@string/banner_150" 
     android:src="@drawable/websurg_icon_white_150" /> 

</RelativeLayout> 

Да, мой SliderView находится в моем com.google.android.glass.sample.apidemo.card пакете. Да, у моего SliderView есть три разных требуемых конструктора.

public SliderView(Context paramContext) { 
    this(paramContext, null); 
} 

public SliderView(Context paramContext, AttributeSet paramAttributeSet) { 
    this(paramContext, paramAttributeSet, 0); 
} 

public SliderView(Context paramContext, AttributeSet paramAttributeSet, int paramInt) { 
    super(paramContext, paramAttributeSet, paramInt); 
    LayoutInflater.from(getContext()).inflate(R.layout.slider, this); 
    this.slider = findViewById(R.id.slider_control); 
    this.indeterminateSlider = ((ImageView) findViewById(R.id.indeterm_slider)); 
    hideSlider(false); 
    hideIndeterminateSlider(false); 
} 

Я получаю две конкретные проблемы, и именно:

java.lang.RuntimeException: Не удается запустить активность ComponentInfo {com.google.android.glass.sample.apidement/ком .google.android.glass.sample.apidemeo.card.SearchActivity}:

и

android.view.InflateException: Binary XML файл строка # 7: Ошибка накачивания класса com.google.android.glass.sample.apidemo.card.SliderView

LogCat Ошибки:

11-25 14:39:00.037: W/dalvikvm(3900): threadid=1: thread exiting with uncaught exception (group=0x41641bd8) 
11-25 14:39:00.044: E/AndroidRuntime(3900): FATAL EXCEPTION: main 
11-25 14:39:00.044: E/AndroidRuntime(3900): Process: com.google.android.glass.sample.apidemo, PID: 3900 
11-25 14:39:00.044: E/AndroidRuntime(3900): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.google.android.glass.sample.apidemo/com.google.android.glass.sample.apidemo.card.SearchActivity}: android.view.InflateException: Binary XML file line #7: Error inflating class com.google.android.glass.sample.apidemo.card.SliderView 
11-25 14:39:00.044: E/AndroidRuntime(3900):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2224) 
11-25 14:39:00.044: E/AndroidRuntime(3900):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2273) 
11-25 14:39:00.044: E/AndroidRuntime(3900):  at android.app.ActivityThread.access$800(ActivityThread.java:138) 
11-25 14:39:00.044: E/AndroidRuntime(3900):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1236) 
11-25 14:39:00.044: E/AndroidRuntime(3900):  at android.os.Handler.dispatchMessage(Handler.java:102) 
11-25 14:39:00.044: E/AndroidRuntime(3900):  at android.os.Looper.loop(Looper.java:149) 
11-25 14:39:00.044: E/AndroidRuntime(3900):  at android.app.ActivityThread.main(ActivityThread.java:5045) 
11-25 14:39:00.044: E/AndroidRuntime(3900):  at java.lang.reflect.Method.invokeNative(Native Method) 
11-25 14:39:00.044: E/AndroidRuntime(3900):  at java.lang.reflect.Method.invoke(Method.java:515) 
11-25 14:39:00.044: E/AndroidRuntime(3900):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
11-25 14:39:00.044: E/AndroidRuntime(3900):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602) 
11-25 14:39:00.044: E/AndroidRuntime(3900):  at dalvik.system.NativeStart.main(Native Method) 
11-25 14:39:00.044: E/AndroidRuntime(3900): Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class com.google.android.glass.sample.apidemo.card.SliderView 
11-25 14:39:00.044: E/AndroidRuntime(3900):  at android.view.LayoutInflater.createView(LayoutInflater.java:620) 
11-25 14:39:00.044: E/AndroidRuntime(3900):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696) 
11-25 14:39:00.044: E/AndroidRuntime(3900):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 
11-25 14:39:00.044: E/AndroidRuntime(3900):  at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
11-25 14:39:00.044: E/AndroidRuntime(3900):  at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
11-25 14:39:00.044: E/AndroidRuntime(3900):  at android.view.LayoutInflater.inflate(LayoutInflater.java:353) 
11-25 14:39:00.044: E/AndroidRuntime(3900):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:294) 
11-25 14:39:00.044: E/AndroidRuntime(3900):  at android.app.Activity.setContentView(Activity.java:1929) 
11-25 14:39:00.044: E/AndroidRuntime(3900):  at com.google.android.glass.sample.apidemo.card.SearchActivity.onCreate(SearchActivity.java:80) 
11-25 14:39:00.044: E/AndroidRuntime(3900):  at android.app.Activity.performCreate(Activity.java:5235) 
11-25 14:39:00.044: E/AndroidRuntime(3900):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1089) 
11-25 14:39:00.044: E/AndroidRuntime(3900):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2188) 
11-25 14:39:00.044: E/AndroidRuntime(3900):  ... 11 more 
11-25 14:39:00.044: E/AndroidRuntime(3900): Caused by: java.lang.reflect.InvocationTargetException 
11-25 14:39:00.044: E/AndroidRuntime(3900):  at java.lang.reflect.Constructor.constructNative(Native Method) 
11-25 14:39:00.044: E/AndroidRuntime(3900):  at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
11-25 14:39:00.044: E/AndroidRuntime(3900):  at android.view.LayoutInflater.createView(LayoutInflater.java:594) 
11-25 14:39:00.044: E/AndroidRuntime(3900):  ... 22 more 
11-25 14:39:00.044: E/AndroidRuntime(3900): Caused by: java.lang.ClassCastException: com.google.android.glass.sample.apidemo.card.SliderView cannot be cast to android.widget.ImageView 
11-25 14:39:00.044: E/AndroidRuntime(3900):  at com.google.android.glass.sample.apidemo.card.SliderView.<init>(SliderView.java:52) 
11-25 14:39:00.044: E/AndroidRuntime(3900):  at com.google.android.glass.sample.apidemo.card.SliderView.<init>(SliderView.java:45) 
11-25 14:39:00.044: E/AndroidRuntime(3900):  ... 25 more 

Итак, мой вопрос в том, что вызывает эти ошибки? Что мне нужно изменить для его работы?

ОБНОВЛЕНИЕ:

LayoutInflater.from(getContext()).inflate(R.layout.slider, this); 
     this.slider = findViewById(R.id.slider_control); 
     this.indeterminateSlider = ((ImageView) findViewById(R.id.indeterm_slider)); 

Это значение по умолчанию разрешения/макет/слайдер XML:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="@dimen/slider_bar_height" > 

    <View 
     android:id="@id/slider_control" 
     android:layout_width="0.0px" 
     android:layout_height="@dimen/slider_bar_height" 
     android:background="@android:color/white" /> 

    <ImageView 
     android:id="@id/indeterminate_slider" 
     android:layout_width="fill_parent" 
     android:layout_height="@dimen/slider_bar_height" 
     android:background="@drawable/slider_indeterminate" /> 

</FrameLayout> 
+0

Очистите и перестройте, чтобы исправить корпус, если ваши идентификаторы просмотра не синхронизированы между 'R' и двоичными XML-файлами. – laalto

+0

Любые причины использования пользовательского 'View' вместо API' 'Slider' (https://developers.google.com/glass/develop/gdk/slider)? – Alain

+0

Я попытался опубликовать свою стеклянную посуду, и команда обзора не упомянула api. Они просто дали мне сообщение и ссылку на github для создания progressbars. Я не знаю, отвечает ли это на ваш вопрос или нет. «В конце концов, мы надеемся, что облегчить сборку индикаторов прогресса с помощью GDK. До этого времени ознакомьтесь с этим образцом от одного из наших исследователей: https://github.com/w9jds/GDK-ProgressBar.» – rottenoats

ответ

3

Обновление: Раствор следующее:

В вашем SliderView.java constr uctor (public SliderView(Context paramContext, AttributeSet paramAttributeSet, int paramInt)):

Изменение:

this.indeterminateSlider = ((ImageView) findViewById(R.id.indeterm_slider)); 

к:

this.indeterminateSlider = ((ImageView) findViewById(R.id.indeterminate_slider)); 

В вашем slider.xml (находится в Рез/макет/):

Изменение:

<ImageView 
     android:id="@id/indeterminate_slider" [...] /> 

To:

<ImageView 
    android:id="@+id/indeterminate_slider" [...] /> 

Основная проблема заключается в получении вашего SliderView.java, чтобы указать на правый идентификатор. Поскольку это не было сделано, вы получали InflateException. Как только это исправлено, вы получаете ClassCastException. Это произошло из вашей slider.xml не имея, что +

indeterm_slider является SliderView, и вы бросаете в ImageView. Вы получили InflateException, потому что из-за этого невозможно создать ваше представление ClassCastException

+0

Что вы рекомендуете? – rottenoats

+0

присваивать идентификатор ImageView и искать правильный идентификатор? – Blackbelt

+0

Работая над этим, я дам вам знать, работает оно или нет. – rottenoats

1

Рассмотрите возможность использования нового API Slider, который был выпущен в XE22. Он гораздо проще в использовании и не требует изменения макетов, поскольку он рассматривается как глобальный компонент пользовательского интерфейса.