{"id":2249,"date":"2022-08-30T15:23:17","date_gmt":"2022-08-30T15:23:17","guid":{"rendered":"https:\/\/unknownerror.org\/index.php\/2014\/01\/05\/android-spinner-causes-app-to-crash-when-scrolling-reaches-end-of-list-collection-of-common-programming-errors\/"},"modified":"2022-08-30T15:23:17","modified_gmt":"2022-08-30T15:23:17","slug":"android-spinner-causes-app-to-crash-when-scrolling-reaches-end-of-list-collection-of-common-programming-errors","status":"publish","type":"post","link":"https:\/\/unknownerror.org\/index.php\/2022\/08\/30\/android-spinner-causes-app-to-crash-when-scrolling-reaches-end-of-list-collection-of-common-programming-errors\/","title":{"rendered":"Android Spinner causes App to crash when scrolling reaches end of list-Collection of common programming errors"},"content":{"rendered":"<p>In one of my Activity, i have used the <strong>Spinner<\/strong>. i populate it with an array of <strong>SpinnerCountry<\/strong> class objects &#8230; its defined as following:<\/p>\n<pre><code>class SpinnerCounry {\n    public SpinnerCounry(String spinnerText, String value) {\n        this.spinnerText = spinnerText;\n        this.value = value;\n    }\n\n    public String getSpinnerText() {\n        return spinnerText;\n    }\n\n    public String getValue() {\n        return value;\n    }\n\n    public String toString() {\n        return spinnerText;\n    }\n\n    String spinnerText;\n    String value;\n}\n<\/code><\/pre>\n<p>I am binding the <strong>Spinner<\/strong> in a function that is below:<\/p>\n<pre><code>private void setCountriesSpinner() {\n\n    \/\/create array of countries!\n    final SpinnerCounry items[] = new SpinnerCounry[233];\n    items[0] = new SpinnerCounry(\"Abkhazia\", \"207\");\n    items[1] = new SpinnerCounry(\"Afghanistan\", \"1\");\n    items[2] = new SpinnerCounry(\"Albania\", \"103\");\n    items[3] = new SpinnerCounry(\"Algeria\", \"2\");\n              ....\n              ....\n              ....\n    items[230] = new SpinnerCounry(\"Zambia\", \"154\");\n    items[231] = new SpinnerCounry(\"Zimbabwe\", \"155\");\n\n    ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, items);\n         adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\n\n    Spinner s = (Spinner) findViewById(R.id.spinner);\n\n    s.setAdapter(adapter);      \n\n    s.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {\n        public void onItemSelected(AdapterView parent, View view,\n                int position, long id) {\n\n            \/\/get the selected country's id to use later\n            _countryId = items[position].getValue();\n\n        }\n\n        public void onNothingSelected(AdapterView parent) {\n        }\n    });\n}\n<\/code><\/pre>\n<p>This works well &#8230; loads the countries in spinner &amp; selects the correct country id when clicked\/tapped.<\/p>\n<p>BUT when i scroll the Spinner to the last country, it crashes the application. i looked at the LogCat but did not get whats wrong&#8230;<\/p>\n<p>LogCat is as follows:<\/p>\n<pre><code>03-06 19:39:04.004: E\/AndroidRuntime(1179): FATAL EXCEPTION: main\n03-06 19:39:04.004: E\/AndroidRuntime(1179): java.lang.NullPointerException\n03-06 19:39:04.004: E\/AndroidRuntime(1179):     at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:398)\n03-06 19:39:04.004: E\/AndroidRuntime(1179):     at android.widget.ArrayAdapter.getDropDownView(ArrayAdapter.java:419)\n03-06 19:39:04.004: E\/AndroidRuntime(1179):     at android.widget.Spinner$DropDownAdapter.getDropDownView(Spinner.java:543)\n03-06 19:39:04.004: E\/AndroidRuntime(1179):     at android.widget.Spinner$DropDownAdapter.getView(Spinner.java:539)\n03-06 19:39:04.004: E\/AndroidRuntime(1179):     at android.widget.AbsListView.obtainView(AbsListView.java:1949)\n03-06 19:39:04.004: E\/AndroidRuntime(1179):     at android.widget.ListPopupWindow$DropDownListView.obtainView(ListPopupWindow.java:1156)\n03-06 19:39:04.004: E\/AndroidRuntime(1179):     at android.widget.ListView.makeAndAddView(ListView.java:1756)\n03-06 19:39:04.004: E\/AndroidRuntime(1179):     at android.widget.ListView.fillDown(ListView.java:656)\n03-06 19:39:04.004: E\/AndroidRuntime(1179):     at android.widget.ListView.fillGap(ListView.java:620)\n03-06 19:39:04.004: E\/AndroidRuntime(1179):     at android.widget.AbsListView.trackMotionScroll(AbsListView.java:4408)\n03-06 19:39:04.004: E\/AndroidRuntime(1179):     at android.widget.AbsListView$FlingRunnable.run(AbsListView.java:3687)\n03-06 19:39:04.004: E\/AndroidRuntime(1179):     at android.os.Handler.handleCallback(Handler.java:587)\n03-06 19:39:04.004: E\/AndroidRuntime(1179):     at android.os.Handler.dispatchMessage(Handler.java:92)\n03-06 19:39:04.004: E\/AndroidRuntime(1179):     at android.os.Looper.loop(Looper.java:132)\n03-06 19:39:04.004: E\/AndroidRuntime(1179):     at android.app.ActivityThread.main(ActivityThread.java:4025)\n03-06 19:39:04.004: E\/AndroidRuntime(1179):     at java.lang.reflect.Method.invokeNative(Native Method)\n03-06 19:39:04.004: E\/AndroidRuntime(1179):     at java.lang.reflect.Method.invoke(Method.java:491)\n03-06 19:39:04.004: E\/AndroidRuntime(1179):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)\n03-06 19:39:04.004: E\/AndroidRuntime(1179):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)\n03-06 19:39:04.004: E\/AndroidRuntime(1179):     at dalvik.system.NativeStart.main(Native Method)\n<\/code><\/pre>\n<p>Any help is greatly appreciated. Thanks<\/p>\n<ol>\n<li>\n<p>Your array contains 233 entries. But last entry [232] is empty, i.e. <code>null<\/code>. That is what is making your application crash.<\/p>\n<p>I&#8217;d recommend using an ArrayList instead of your current fixed array approach.<\/p>\n<\/li>\n<li>\n<p>You&#8217;ve created an array of 233 elements but you insert only 232 of them.<\/p>\n<p>Maybe, when you try to access the element at index 232, you get a null pointer exception.<\/p>\n<\/li>\n<\/ol>\n<p id=\"rop\"><small>Originally posted 2014-01-05 09:32:25. <\/small><\/p>","protected":false},"excerpt":{"rendered":"<p>In one of my Activity, i have used the Spinner. i populate it with an array of SpinnerCountry class objects &#8230; its defined as following: class SpinnerCounry { public SpinnerCounry(String spinnerText, String value) { this.spinnerText = spinnerText; this.value = value; } public String getSpinnerText() { return spinnerText; } public String getValue() { return value; } [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-2249","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/posts\/2249","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/comments?post=2249"}],"version-history":[{"count":0,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/posts\/2249\/revisions"}],"wp:attachment":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/media?parent=2249"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/categories?post=2249"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/tags?post=2249"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}