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