Note that there are some explanatory texts on larger screens.

plurals
  1. POException thrown during TypedArray#getTextArray()
    primarykey
    data
    text
    <p>This is my first time creating a custom view and I'm trying to populate it with entries via XML -- in a manner similar to a Spinner. I'm obviously doing something wrong here, but I've styled my approach after the Spinner, so I fail to see what has gone wrong.</p> <p>To explain the intent of this code, I'm creating a custom preference list. MultiChooserOption is an item that allows a user to select multiple things from a list of options. TextOption simply defines the view that will be displayed in the list, i.e.- ther e is a caption and some other element, for subclasses of TextOption the other element will be text as opposed to a widget (checkbox, etc.).</p> <p>Below is the source for everything that should have any impact on the way I've built this as well as my logcat output.</p> <p>attrs.xml</p> <pre><code>&lt;resources&gt; &lt;attr name="caption" format="string" /&gt; &lt;attr name="options" format="reference" /&gt; &lt;declare-styleable name="TextOption"&gt; &lt;attr name="caption" /&gt; &lt;attr name="text" format="string" /&gt; &lt;/declare-styleable&gt; &lt;declare-styleable name="MultiChooserOption"&gt; &lt;attr name="options" /&gt; &lt;/declare-styleable&gt; &lt;/resources&gt; </code></pre> <p>MultiChooserOption.java</p> <pre><code>public class MultiChooserOption extends TextOption&lt;CharSequence&gt; { public static final String TAG = MultiChooserOption.class.getSimpleName(); private List&lt;CharSequence&gt; options; private MultiChoiceListView&lt;CharSequence&gt; choiceView; public MultiChooserOption(Context context) { super( context ); } public MultiChooserOption(Context context, AttributeSet attrs) { super( context, attrs ); initOptions( attrs ); } private void initOptions( AttributeSet attrs ) { TypedArray attributesArray = getContext().obtainStyledAttributes( attrs, R.styleable.TextOption, 0, 0 ); try { // this line is where things go wrong CharSequence[] optionsArray = attributesArray.getTextArray( R.styleable.MultiChooserOption_options ); setOptions( Arrays.asList( optionsArray ) ); } catch (NotFoundException e) { Log.e( TAG, e.getMessage(), e ); } finally { attributesArray.recycle(); } } } </code></pre> <p>TextOption.java</p> <pre><code>public abstract class TextOption&lt;T&gt; extends LinearLayout { public static final String TAG = TextOption.class.getSimpleName(); private TextView captionTextView; private TextView valueTextView; private String caption; private String value; public TextOption(Context context) { super( context ); init(); } public TextOption(Context context, AttributeSet attrs) { super( context, attrs ); TypedArray attributesArray = context.obtainStyledAttributes( attrs, R.styleable.TextOption, 0, 0 ); try { setCaption( attributesArray.getString( R.styleable.TextOption_caption ) ); setValue( attributesArray.getString( R.styleable.TextOption_text ) ); } finally { attributesArray.recycle(); } init(); } } </code></pre> <p>options_fragment.xml</p> <pre><code>&lt;ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:custom="http://schemas.android.com/apk/res/com.mypackage" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/white" &gt; &lt;LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" &gt; &lt;com.mypackage.view.MultiChooserOption android:id="@+id/multichooser" android:layout_width="match_parent" android:layout_height="wrap_content" custom:caption="@string/multichooser_caption" custom:options="@array/multichooser_options" /&gt; &lt;/LinearLayout&gt; &lt;/ScrollView&gt; </code></pre> <p>arrays.xml</p> <pre><code>&lt;resources&gt; &lt;string-array name="multichooser_options"&gt; &lt;item&gt;@string/option1&lt;/item&gt; &lt;item&gt;@string/option2&lt;/item&gt; &lt;item&gt;@string/option3&lt;/item&gt; &lt;item&gt;@string/option4&lt;/item&gt; &lt;item&gt;@string/option5&lt;/item&gt; &lt;item&gt;@string/option6&lt;/item&gt; &lt;/string-array&gt; &lt;/resources&gt; </code></pre> <p>strings.xml</p> <pre><code>&lt;resources&gt; &lt;string name="multichooser_caption"&gt;MultiChooser&lt;/string&gt; &lt;string name="option1"&gt;option 1&lt;/string&gt; &lt;string name="option2"&gt;option 2&lt;/string&gt; &lt;string name="option3"&gt;option 3&lt;/string&gt; &lt;string name="option4"&gt;option 4&lt;/string&gt; &lt;string name="option5"&gt;option 5&lt;/string&gt; &lt;string name="option6"&gt;option 6&lt;/string&gt; &lt;/resources&gt; </code></pre> <p>OptionsFragment.java</p> <pre><code>public class OptionsFragment extends RoboSherlockFragment { public static final String TAG = OptionsFragment.class.getSimpleName(); @Override public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState ) { View view = inflater.inflate( R.layout.options_fragment, container, false ); return view; } } </code></pre> <p>logcat output</p> <pre><code>09-18 20:52:36.940: E/AndroidRuntime(4237): FATAL EXCEPTION: main 09-18 20:52:36.940: E/AndroidRuntime(4237): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mypackage/com.mypackage.ui.OptionsActivity}: android.view.InflateException: Binary XML file line #44: Error inflating class com.mypackage.view.MultiChooserOption 09-18 20:52:36.940: E/AndroidRuntime(4237): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 09-18 20:52:36.940: E/AndroidRuntime(4237): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 09-18 20:52:36.940: E/AndroidRuntime(4237): at android.app.ActivityThread.access$600(ActivityThread.java:141) 09-18 20:52:36.940: E/AndroidRuntime(4237): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 09-18 20:52:36.940: E/AndroidRuntime(4237): at android.os.Handler.dispatchMessage(Handler.java:99) 09-18 20:52:36.940: E/AndroidRuntime(4237): at android.os.Looper.loop(Looper.java:137) 09-18 20:52:36.940: E/AndroidRuntime(4237): at android.app.ActivityThread.main(ActivityThread.java:5041) 09-18 20:52:36.940: E/AndroidRuntime(4237): at java.lang.reflect.Method.invokeNative(Native Method) 09-18 20:52:36.940: E/AndroidRuntime(4237): at java.lang.reflect.Method.invoke(Method.java:511) 09-18 20:52:36.940: E/AndroidRuntime(4237): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 09-18 20:52:36.940: E/AndroidRuntime(4237): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 09-18 20:52:36.940: E/AndroidRuntime(4237): at dalvik.system.NativeStart.main(Native Method) 09-18 20:52:36.940: E/AndroidRuntime(4237): Caused by: android.view.InflateException: Binary XML file line #44: Error inflating class com.mypackage.view.MultiChooserOption 09-18 20:52:36.940: E/AndroidRuntime(4237): at android.view.LayoutInflater.createView(LayoutInflater.java:613) 09-18 20:52:36.940: E/AndroidRuntime(4237): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687) 09-18 20:52:36.940: E/AndroidRuntime(4237): at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 09-18 20:52:36.940: E/AndroidRuntime(4237): at android.view.LayoutInflater.rInflate(LayoutInflater.java:749) 09-18 20:52:36.940: E/AndroidRuntime(4237): at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 09-18 20:52:36.940: E/AndroidRuntime(4237): at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 09-18 20:52:36.940: E/AndroidRuntime(4237): at com.mypackage.ui.OptionsFragment.onCreateView(OptionsFragment.java:27) 09-18 20:52:36.940: E/AndroidRuntime(4237): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460) 09-18 20:52:36.940: E/AndroidRuntime(4237): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911) 09-18 20:52:36.940: E/AndroidRuntime(4237): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088) 09-18 20:52:36.940: E/AndroidRuntime(4237): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 09-18 20:52:36.940: E/AndroidRuntime(4237): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444) 09-18 20:52:36.940: E/AndroidRuntime(4237): at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:551) 09-18 20:52:36.940: E/AndroidRuntime(4237): at com.github.rtyley.android.sherlock.roboguice.activity.RoboSherlockFragmentActivity.onStart(RoboSherlockFragmentActivity.java:46) 09-18 20:52:36.940: E/AndroidRuntime(4237): at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1164) 09-18 20:52:36.940: E/AndroidRuntime(4237): at android.app.Activity.performStart(Activity.java:5114) 09-18 20:52:36.940: E/AndroidRuntime(4237): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2153) 09-18 20:52:36.940: E/AndroidRuntime(4237): ... 11 more 09-18 20:52:36.940: E/AndroidRuntime(4237): Caused by: java.lang.reflect.InvocationTargetException 09-18 20:52:36.940: E/AndroidRuntime(4237): at java.lang.reflect.Constructor.constructNative(Native Method) 09-18 20:52:36.940: E/AndroidRuntime(4237): at java.lang.reflect.Constructor.newInstance(Constructor.java:417) 09-18 20:52:36.940: E/AndroidRuntime(4237): at android.view.LayoutInflater.createView(LayoutInflater.java:587) 09-18 20:52:36.940: E/AndroidRuntime(4237): ... 27 more 09-18 20:52:36.940: E/AndroidRuntime(4237): Caused by: java.lang.NullPointerException 09-18 20:52:36.940: E/AndroidRuntime(4237): at android.content.res.AssetManager.getResourceTextArray(AssetManager.java:214) 09-18 20:52:36.940: E/AndroidRuntime(4237): at android.content.res.Resources.getTextArray(Resources.java:427) 09-18 20:52:36.940: E/AndroidRuntime(4237): at android.content.res.TypedArray.getTextArray(TypedArray.java:628) 09-18 20:52:36.940: E/AndroidRuntime(4237): at com.mypackage.view.MultiChooserOption.initOptions(MultiChooserOption.java:42) 09-18 20:52:36.940: E/AndroidRuntime(4237): at com.mypackage.view.MultiChooserOption.&lt;init&gt;(MultiChooserOption.java:32) 09-18 20:52:36.940: E/AndroidRuntime(4237): ... 30 more </code></pre> <p>So, when the line <code>CharSequence[] optionsArray = attributesArray.getTextArray( R.styleable.MultiChooserOption_options );</code> in MultiChooserOption executes, an exception is thrown and the whole shebang come crumbling down. As far as I know, I'm following Spinner as much as should matter. </p> <p>Please help me learn what I've done wrong here.</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload