java - setOnItemSelectedListener not being called? -
i'm new android , working on first app. trying parse contents of google sheets spreadsheets, list of names spinner. i've done using arrayadapter arraylist can see options when expand spinner. problem i'm facing spinner doesn't show selected item when 1 selected. if try run code, you'll see if try click submit button, it'll tell null being selected, i've narrowed down problem selected name string not being selected.
here mainactivity class:
public class mainactivity extends appcompatactivity implements view.onclicklistener{ arraylist<string> names = new arraylist<string>(); spinner spbusinesstype; button btnsubmit; arrayadapter<string> adapterbusinesstype; string sbusinesstype; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); spbusinesstype = (spinner) findviewbyid(r.id.spbussinesstype); btnsubmit=(button)findviewbyid(r.id.submit); btnsubmit.setonclicklistener(this); new downloadwebpagetask(new asyncresult() { @override public void onresult(jsonobject object) { processjson(object); } }).execute("https://spreadsheets.google.com/tq?key=1jku2vt_gmnuyyalct4m9xelldpglq3n4uhs9qfrzxoq"); adapterbusinesstype = new arrayadapter<string>(this, android.r.layout.simple_spinner_item, names); adapterbusinesstype.setdropdownviewresource(android.r.layout.simple_spinner_dropdown_item); spbusinesstype.setadapter(adapterbusinesstype); spbusinesstype.setonitemselectedlistener(new adapterview.onitemselectedlistener() { @override public void onitemselected(adapterview<?> adapter, view v, int position, long id) { // on selecting spinner item sbusinesstype = adapter.getitematposition(position).tostring(); system.out.println(sbusinesstype); // showing selected spinner item toast.maketext(getapplicationcontext(), "bussiness type : " + sbusinesstype, toast.length_short).show(); } @override public void onnothingselected(adapterview<?> arg0) { // todo auto-generated method stub } }); } @override public void onclick(view v) { toast.maketext(getapplicationcontext(), "you have selected " + sbusinesstype,toast.length_short).show(); } private void processjson(jsonobject object) { try { jsonarray rows = object.getjsonarray("rows"); (int r = 0; r < rows.length(); ++r) { jsonobject row = rows.getjsonobject(r); jsonarray columns = row.getjsonarray("c"); string name = columns.getjsonobject(0).getstring("v"); names.add(name); } } catch (jsonexception e) { e.printstacktrace(); } } the asyncresult interface i'm using obtain json object google sheets:
public interface asyncresult { void onresult(jsonobject object); } the downloadwebpagetask class obtaining , parsing json object:
public class downloadwebpagetask extends asynctask<string, void, string> { asyncresult callback; public downloadwebpagetask(asyncresult callback) { this.callback = callback; } @override protected string doinbackground(string... urls) { // params comes execute() call: params[0] url. try { return downloadurl(urls[0]); } catch (ioexception e) { return "unable download requested page."; } } // onpostexecute displays results of asynctask. @override protected void onpostexecute(string result) { // remove unnecessary parts response , construct json int start = result.indexof("{", result.indexof("{") + 1); int end = result.lastindexof("}"); string jsonresponse = result.substring(start, end); try { jsonobject table = new jsonobject(jsonresponse); callback.onresult(table); } catch (jsonexception e) { e.printstacktrace(); } } private string downloadurl(string urlstring) throws ioexception { inputstream = null; try { url url = new url(urlstring); httpurlconnection conn = (httpurlconnection) url.openconnection(); conn.setreadtimeout(10000 /* milliseconds */); conn.setconnecttimeout(15000 /* milliseconds */); conn.setrequestmethod("get"); conn.setdoinput(true); // starts query conn.connect(); int responsecode = conn.getresponsecode(); = conn.getinputstream(); string contentasstring = convertstreamtostring(is); return contentasstring; } { if (is != null) { is.close(); } } } private string convertstreamtostring(inputstream is) { bufferedreader reader = new bufferedreader(new inputstreamreader(is)); stringbuilder sb = new stringbuilder(); string line = null; try { while ((line = reader.readline()) != null) { sb.append(line + "\n"); } } catch (ioexception e) { e.printstacktrace(); } { try { is.close(); } catch (ioexception e) { e.printstacktrace(); } } return sb.tostring(); } the activity_main layout file:
<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:paddingleft="@dimen/activity_horizontal_margin" android:paddingright="@dimen/activity_horizontal_margin" android:paddingtop="@dimen/activity_vertical_margin" android:paddingbottom="@dimen/activity_vertical_margin" tools:context=".mainactivity"> <include layout="@layout/content_main" /> </relativelayout> and content_main layout file put spinner in:
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingbottom="@dimen/activity_vertical_margin" android:paddingleft="@dimen/activity_horizontal_margin" android:paddingright="@dimen/activity_horizontal_margin" android:paddingtop="@dimen/activity_vertical_margin" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:context=".mainactivity"> tools:showin="@layout/activity_main"> <textview android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="select business type" android:textcolor="#000000" android:textsize="20sp" /> <spinner android:id="@+id/spbussinesstype" style="@style/base.widget.appcompat.spinner.underlined" android:layout_width="match_parent" android:layout_height="wrap_content"></spinner> <button android:id="@+id/submit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_margin="10dp" android:text="submit" android:textsize="15sp" /> </linearlayout> what causing adapter not detect when 1 of name strings being selected? related how i'm parsing them google sheet?
you didnt notify arrayadapter data has changed, passed empty arraylist , upon filling array list, have notifiy adapter data has changed , time consider that, like
private void processjson(jsonobject object) { try { jsonarray rows = object.getjsonarray("rows"); (int r = 0; r < rows.length(); ++r) { jsonobject row = rows.getjsonobject(r); jsonarray columns = row.getjsonarray("c"); string name = columns.getjsonobject(0).getstring("v"); names.add(name); } adapterbusinesstype.notifydatasetchanged(); } catch (jsonexception e) { e.printstacktrace(); } } that should help.
Java - Setonitemselectedlistener Not Being Called? - >>>>> Download Now
ReplyDelete>>>>> Download Full
Java - Setonitemselectedlistener Not Being Called? - >>>>> Download LINK
>>>>> Download Now
Java - Setonitemselectedlistener Not Being Called? - >>>>> Download Full
>>>>> Download LINK 1q