I get a NullPointerException
in creating a layout on Android 5.0, Android 4 works fine. There is a Spinner
in there with an extended ArrayAdapter
.
EDIT It only occurs if I try to set a selection with setSelection
.
Below is my stack trace:
12-17 09:35:40.195: E/AndroidRuntime(25564): FATAL EXCEPTION: main
12-17 09:35:40.195: E/AndroidRuntime(25564): Process: nl.minerall.sapphire.pocket, PID: 25564
12-17 09:35:40.195: E/AndroidRuntime(25564): java.lang.NullPointerException: Attempt to read from field 'int android.view.ViewGroup$LayoutParams.height' on a null object reference
12-17 09:35:40.195: E/AndroidRuntime(25564): at android.widget.TextView.makeNewLayout(TextView.java:6573)
12-17 09:35:40.195: E/AndroidRuntime(25564): at android.widget.TextView.onMeasure(TextView.java:6851)
12-17 09:35:40.195: E/AndroidRuntime(25564): at android.view.View.measure(View.java:17496)
12-17 09:35:40.195: E/AndroidRuntime(25564): at android.widget.Spinner.setUpChild(Spinner.java:669)
12-17 09:35:40.195: E/AndroidRuntime(25564): at android.widget.Spinner.makeView(Spinner.java:632)
12-17 09:35:40.195: E/AndroidRuntime(25564): at android.widget.Spinner.getBaseline(Spinner.java:458)
12-17 09:35:40.195: E/AndroidRuntime(25564): at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1122)
12-17 09:35:40.195: E/AndroidRuntime(25564): at android.widget.TableRow.onMeasure(TableRow.java:114)
12-17 09:35:40.195: E/AndroidRuntime(25564): at android.view.View.measure(View.java:17496)
12-17 09:35:40.195: E/AndroidRuntime(25564): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5464)
12-17 09:35:40.195: E/AndroidRuntime(25564): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1438)
12-17 09:35:40.195: E/AndroidRuntime(25564): at android.widget.TableLayout.measureChildBeforeLayout(TableLayout.java:464)
12-17 09:35:40.195: E/AndroidRuntime(25564): at android.widget.LinearLayout.measureVertical(LinearLayout.java:724)
12-17 09:35:40.195: E/AndroidRuntime(25564): at android.widget.TableLayout.measureVertical(TableLayout.java:476)
12-17 09:35:40.195: E/AndroidRuntime(25564): at android.widget.TableLayout.onMeasure(TableLayout.java:439)
12-17 09:35:40.195: E/AndroidRuntime(25564): at android.view.View.measure(View.java:17496)
12-17 09:35:40.195: E/AndroidRuntime(25564): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5464)
12-17 09:35:40.195: E/AndroidRuntime(25564): at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
12-17 09:35:40.195: E/AndroidRuntime(25564): at android.view.View.measure(View.java:17496)
12-17 09:35:40.195: E/AndroidRuntime(25564): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5464)
12-17 09:35:40.195: E/AndroidRuntime(25564): at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:447)
12-17 09:35:40.195: E/AndroidRuntime(25564): at android.view.View.measure(View.java:17496)
12-17 09:35:40.195: E/AndroidRuntime(25564): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5464)
12-17 09:35:40.195: E/AndroidRuntime(25564): at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
12-17 09:35:40.195: E/AndroidRuntime(25564): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2636)
12-17 09:35:40.195: E/AndroidRuntime(25564): at android.view.View.measure(View.java:17496)
12-17 09:35:40.195: E/AndroidRuntime(25564): at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2089)
12-17 09:35:40.195: E/AndroidRuntime(25564): at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1251)
12-17 09:35:40.195: E/AndroidRuntime(25564): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1458)
12-17 09:35:40.195: E/AndroidRuntime(25564): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1136)
12-17 09:35:40.195: E/AndroidRuntime(25564): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5933)
12-17 09:35:40.195: E/AndroidRuntime(25564): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
12-17 09:35:40.195: E/AndroidRuntime(25564): at android.view.Choreographer.doCallbacks(Choreographer.java:580)
12-17 09:35:40.195: E/AndroidRuntime(25564): at android.view.Choreographer.doFrame(Choreographer.java:550)
12-17 09:35:40.195: E/AndroidRuntime(25564): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
12-17 09:35:40.195: E/AndroidRuntime(25564): at android.os.Handler.handleCallback(Handler.java:739)
12-17 09:35:40.195: E/AndroidRuntime(25564): at android.os.Handler.dispatchMessage(Handler.java:95)
12-17 09:35:40.195: E/AndroidRuntime(25564): at android.os.Looper.loop(Looper.java:135)
12-17 09:35:40.195: E/AndroidRuntime(25564): at android.app.ActivityThread.main(ActivityThread.java:5297)
12-17 09:35:40.195: E/AndroidRuntime(25564): at java.lang.reflect.Method.invoke(Native Method)
12-17 09:35:40.195: E/AndroidRuntime(25564): at java.lang.reflect.Method.invoke(Method.java:372)
12-17 09:35:40.195: E/AndroidRuntime(25564): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908)
12-17 09:35:40.195: E/AndroidRuntime(25564): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703)
This is the XML-excerpt where the spinner is defined:
<TableRow
android:id="@+id/tableRow1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="5dp"
android:paddingRight="5dp" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:gravity="right"
android:text="@string/method"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/Blue" />
<Spinner
android:id="@+id/spMethod"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />
</TableRow>
This is my adapter:
public class PMethodAdapter extends ArrayAdapter<PMethod> {
static ArrayList<PMethod> methods = null;
private LayoutInflater mInflater;
public PMethodAdapter(Context ctx) {
super(ctx, 0);
mInflater = LayoutInflater.from(ctx);
if (methods == null) {
methods = new ArrayList<PMethod>();
methods.add(new PMethod(PMethod.METHOD_ONE, "one");
methods.add(new PMethod(PMethod.METHOD_TWO, "two");
methods.add(new PMethod(PMethod.METHOD_THREE, "three");
}
}
@Override
public int getCount() {
return methods.size();
}
@Override
public PMethod getItem(int position) {
return methods.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = mInflater.inflate(android.R.layout.simple_spinner_item, null);
}
TextView tvLabel = (TextView)convertView.findViewById(android.R.id.text1);
PMethod pm = methods.get(position);
tvLabel.setText(pm.getLabel());
return convertView;
}
public int getItemIdByMethod(int methodid) {
// return an ID from the method ID
int i = -1;
for (i = 0; i < methods.size(); i++) {
PMethod pm = methods.get(i);
if (pm.getMethod() == methodid) {
break;
}
}
return i;
}
}
the METHOD_*
constants are just integers.
Also, when I call setSelection
in onResume
the same error occurs, when I call it after the complete layout has been rendered, it does work.