android nullpointerexception spinner android-arrayadapter

android - Spinner: NullPointerException en ArrayAdapter.createViewFromResource



android-arrayadapter (4)

Creo algunos Spinners por código como este:

if (dyn_list_id[i]==null){ String[] form_ids = db.getEntireColumn(list_table_name[i], "form_label_id"); String[] spinnerArray = new String[form_ids.length]; for (int k=0;k<form_ids.length;k++){ spinnerArray[k] = db.getFromLanguageTable(language_short_name, list_table_name[i], form_ids[k]); System.out.println("Spinner Array "+spinnerArray[k]); } product_spinner[i] = new Spinner(viewToLoad.getContext()); //First Spinner product_spinner[i].setLayoutParams(lp_spinner); product_spinner[i].setBackgroundResource(R.drawable.spinner_selector); ArrayAdapter spinnerArrayAdapter = new ArrayAdapter(viewToLoad.getContext(), com.Orange.R.layout.my_spinner_textview, spinnerArray); spinnerArrayAdapter.setDropDownViewResource(R.layout.multiline_spinner_dropdown_item); product_spinner[i].setAdapter(spinnerArrayAdapter); this.SpinnerFields.add(product_spinner[i]); linear_layout[i].addView(product_spinner[i]); tablerow_product[i].addView(linear_layout[i]); Themes_TableLayout.addView(tablerow_product[i],new TableLayout.LayoutParams(TableRow.LayoutParams.FILL_PARENT, TableRow.LayoutParams.WRAP_CONTENT)); } else { String[] spinnerA = new String[item_visible]; int cont=0; for (int p=0;p<status_itemList.length;p++){ if (status_itemList[p].trim().equals("1")){ spinnerA[cont]=db.getFromLanguageTable(language_short_name, "pr_dyn_list_option", form_label_id_itemList[p]); System.out.println("Spinner dinamic array "+spinnerA[cont]); cont++; } } product_spinner[i] = new Spinner(viewToLoad.getContext()); //second Spinner product_spinner[i].setLayoutParams(lp_spinner); product_spinner[i].setBackgroundResource(R.drawable.spinner_selector); ArrayAdapter spinnerAdapter = new ArrayAdapter(viewToLoad.getContext(), com.Orange.R.layout.my_spinner_textview, spinnerA); spinnerAdapter.setDropDownViewResource(com.Orange.R.layout.multiline_spinner_dropdown_item); product_spinner[i].setAdapter(spinnerAdapter); this.SpinnerFields.add(product_spinner[i]); linear_layout[i].addView(product_spinner[i]); tablerow_product[i].addView(linear_layout[i]); Themes_TableLayout.addView(tablerow_product[i],new TableLayout.LayoutParams(TableRow.LayoutParams.FILL_PARENT, TableRow.LayoutParams.WRAP_CONTENT)); }

Parece estar bien en la pantalla, pero cuando hago clic en él obtengo este error:

15:53:22.040 8716 com.Orange ERROR AndroidRuntime java.lang.NullPointerException 15:53:22.040 8716 com.Orange ERROR AndroidRuntime at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:355) 15:53:22.040 8716 com.Orange ERROR AndroidRuntime at android.widget.ArrayAdapter.getDropDownView(ArrayAdapter.java:376) 15:53:22.040 8716 com.Orange ERROR AndroidRuntime at android.widget.Spinner$DropDownAdapter.getDropDownView(Spinner.java:329) 15:53:22.040 8716 com.Orange ERROR AndroidRuntime at android.widget.Spinner$DropDownAdapter.getView(Spinner.java:325) 15:53:22.040 8716 com.Orange ERROR AndroidRuntime at android.widget.AbsListView.obtainView(AbsListView.java:1294) 15:53:22.040 8716 com.Orange ERROR AndroidRuntime at android.widget.ListView.measureHeightOfChildren(ListView.java:1198) 15:53:22.040 8716 com.Orange ERROR AndroidRuntime at android.widget.ListView.onMeasure(ListView.java:1109) 15:53:22.040 8716 com.Orange ERROR AndroidRuntime at android.view.View.measure(View.java:8171) 15:53:22.040 8716 com.Orange ERROR AndroidRuntime at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132) 15:53:22.040 8716 com.Orange ERROR AndroidRuntime at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1012) 15:53:22.040 8716 com.Orange ERROR AndroidRuntime at android.widget.LinearLayout.measureVertical(LinearLayout.java:381) 15:53:22.040 8716 com.Orange ERROR AndroidRuntime at android.widget.LinearLayout.onMeasure(LinearLayout.java:304) 15:53:22.040 8716 com.Orange ERROR AndroidRuntime at com.android.internal.widget.WeightedLinearLayout.onMeasure(WeightedLinearLayout.java:60) 15:53:22.040 8716 com.Orange ERROR AndroidRuntime at android.widget.FrameLayout.onMeasure(FrameLayout.java:245) 15:53:22.040 8716 com.Orange ERROR AndroidRuntime at android.view.ViewRoot.performTraversals(ViewRoot.java:801) 15:53:22.040 8716 com.Orange ERROR AndroidRuntime at android.view.ViewRoot.handleMessage(ViewRoot.java:1727) 15:53:22.040 8716 com.Orange ERROR AndroidRuntime at android.os.Handler.dispatchMessage(Handler.java:99) 15:53:22.040 8716 com.Orange ERROR AndroidRuntime at android.os.Looper.loop(Looper.java:123) 15:53:22.040 8716 com.Orange ERROR AndroidRuntime at android.app.ActivityThread.main(ActivityThread.java:4627) 15:53:22.040 8716 com.Orange ERROR AndroidRuntime at java.lang.reflect.Method.invokeNative(Native Method) 15:53:22.040 8716 com.Orange ERROR AndroidRuntime at java.lang.reflect.Method.invoke(Method.java:521) 15:53:22.040 8716 com.Orange ERROR AndroidRuntime at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 15:53:22.040 8716 com.Orange ERROR AndroidRuntime at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)

First Spinner añadido funciona bien, pero para el segundo Spinner obtengo este error. No tengo idea de por qué obtengo un nullpointer en AdapterArray.createViewFromResources porque no uso este método. ¿Dónde está mi error?


Primero spinner que usas:

spinnerArrayAdapter.setDropDownViewResource(R.layout.multiline_spinner_dropdown_item);

segundo que usas:

spinnerAdapter.setDropDownViewResource(com.Orange.R.layout.multiline_spinner_dropdown_item);

¿Estás seguro de que ambos son iguales / funcionan correctamente?


Tiene valores null en la lista / matriz de datos que suministra al adaptador. ArrayAdapter llamará a ArrayAdapter en estos datos para cada fila y si es null lanzará una NullPointerException .

Asegúrese de no tener valores null en spinnerA (creo que son los datos para el segundo Spinner (! ??)).


Mi problema fue que el diseño de elementos personalizados y el diseño de elementos desplegables no usaban el mismo Id para la vista de texto principal; básicamente porque quería crear un artículo personalizado, pero mantener el elemento desplegable predeterminado.

La creación de un elemento desplegable personalizado con el mismo ID de vista de texto resolvió el problema.


Hola, lo he hecho utilizando esta función, verifique valores nulos, no los agregue a su lista. Esta función devolverá una matriz de lista de todos los valores de una columna especificada de la tabla y NO los valores nulos.

public List<String> getList() { List<String> list = new ArrayList<String>(); Cursor cursor = sqlDb.query("tablename", new String[] { "someColumnName1" }, null, null, null, null, null); int i=0; for (cursor.moveToPosition(i); !cursor.isAfterLast(); cursor.moveToNext()) { if(cursor.getString(i) != null) //in loop check for Null Values, add only Not null values { list.add(cursor.getString(i)); } } return shopList; }

Complete el spinner del método anterior de esta manera:

private void populateSpinnerList() { List<String> list = getList(); ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(context, R.layout.some_layout, R.id.some_textview_in_layout, list); if (!list.equals("")) spinner.setAdapter(dataAdapter); }

Funciona para mí como un encanto.