android - NetworkOnMainThreadException on 3.0 and higher -
i did learn on article that, on 3.0 , higher, 1 has use asynctask
preform network activity. knowing this, used asynctask
call on json
request, , main class looks this:
mainpage.java
public class dothefare extends asynctask<void,void,void> { @override protected void onpreexecute() { // todo auto-generated method stub progress = new progressdialog(mainpage.this); progress.setprogressstyle(progressdialog.style_spinner); progress.setmessage("processing request ..."); progress.show(); userfunctions users = new userfunctions(); jobj = users.distanceget(location.gettext().tostring(), destination.gettext().tostring()); super.onpreexecute(); } @override protected void doinbackground(void... arg0) { // todo auto-generated method stub try{ jarr = jobj.getjsonarray("rows"); jobj1 = jarr.getjsonobject(0); jarr2 = jobj1.getjsonarray("elements"); jobj2 = jarr2.getjsonobject(0); jobj3 = jobj2.getjsonobject("distance"); distance_value = jobj3.getstring("text"); string value = jobj3.getstring("value"); sharedpreferences getprefs = preferencemanager.getdefaultsharedpreferences(getbasecontext()); string sf = getprefs.getstring("startfare", "10"); string pm = getprefs.getstring("perkilo", "27"); startfare = double.parsedouble(sf); perkilo = double.parsedouble(pm); permeter=perkilo/5; int parsedistance = integer.parseint(value); double fare = startfare+((parsedistance/200)*permeter); int roundedvalue = (int)math.round(fare); //fare send taxifare = string.valueof(roundedvalue); log.i("fare estimate", taxifare); }catch(exception e){ e.printstacktrace(); } return null; } @override protected void onpostexecute(void result) { // todo auto-generated method stub progress.dismiss(); from_split = location.gettext().tostring(); to_split = destination.gettext().tostring(); if(from_split.contains(",")) { from_fill = from_split.split(","); } else { from_fill = from_split.split(" "); } if(to_split.contains(",")) { to_fill = to_split.split(","); } else { to_fill = to_split.split(" "); } send_location=from_fill[0]; send_destination=to_fill[0]; send_fare = taxifare; send_distance = distance_value; if(ismode.equalsignorecase("")) { calendar c = calendar.getinstance(); int hours = c.get(calendar.hour_of_day); if(hours<6) ismode = "nmode"; else if(hours>=21) ismode = "nmode"; else ismode = "dmode"; } intent toresults = new intent(mainpage.this, resultsdisplay.class); bundle extras = new bundle(); extras.putstring("to", send_location); extras.putstring("from", send_destination); extras.putstring("fare", send_fare); extras.putstring("distance", send_distance); extras.putstring("gmapfrom", from_split.tostring()); extras.putstring("gmapto", to_split.tostring()); extras.putstring("mode",ismode); toresults.putextras(extras); startactivity(toresults); super.onpostexecute(result); } }
in activity
have onclicklistener
calls asynctask
program giving me following
05-10 03:02:19.823: e/androidruntime(1815): fatal exception: main 05-10 03:02:19.823: e/androidruntime(1815): android.os.networkonmainthreadexception 05-10 03:02:19.823: e/androidruntime(1815): @ android.os.strictmode$androidblockguardpolicy.onnetwork(strictmode.java:1117) 05-10 03:02:19.823: e/androidruntime(1815): @ java.net.inetaddress.lookuphostbyname(inetaddress.java:385) 05-10 03:02:19.823: e/androidruntime(1815): @ java.net.inetaddress.getallbynameimpl(inetaddress.java:236) 05-10 03:02:19.823: e/androidruntime(1815): @ java.net.inetaddress.getallbyname(inetaddress.java:214) 05-10 03:02:19.823: e/androidruntime(1815): @ org.apache.http.impl.conn.defaultclientconnectionoperator.openconnection(defaultclientconnectionoperator.java:137) 05-10 03:02:19.823: e/androidruntime(1815): @ org.apache.http.impl.conn.abstractpoolentry.open(abstractpoolentry.java:164) 05-10 03:02:19.823: e/androidruntime(1815): @ org.apache.http.impl.conn.abstractpooledconnadapter.open(abstractpooledconnadapter.java:119) 05-10 03:02:19.823: e/androidruntime(1815): @ org.apache.http.impl.client.defaultrequestdirector.execute(defaultrequestdirector.java:360) 05-10 03:02:19.823: e/androidruntime(1815): @ org.apache.http.impl.client.abstracthttpclient.execute(abstracthttpclient.java:555) 05-10 03:02:19.823: e/androidruntime(1815): @ org.apache.http.impl.client.abstracthttpclient.execute(abstracthttpclient.java:487) 05-10 03:02:19.823: e/androidruntime(1815): @ org.apache.http.impl.client.abstracthttpclient.execute(abstracthttpclient.java:465) 05-10 03:02:19.823: e/androidruntime(1815): @ com.example.calculator_taxi_fare.functions.jsonparser.getjsonfromurl(jsonparser.java:56) 05-10 03:02:19.823: e/androidruntime(1815): @ com.example.calculator_taxi_fare.functions.userfunctions.distanceget(userfunctions.java:28) 05-10 03:02:19.823: e/androidruntime(1815): @ com.example.calculator_taxi_fare.mainpage$dothefare.onpreexecute(mainpage.java:251) 05-10 03:02:19.823: e/androidruntime(1815): @ android.os.asynctask.executeonexecutor(asynctask.java:586) 05-10 03:02:19.823: e/androidruntime(1815): @ android.os.asynctask.execute(asynctask.java:534) 05-10 03:02:19.823: e/androidruntime(1815): @ com.example.calculator_taxi_fare.mainpage$6.onclick(mainpage.java:230) 05-10 03:02:19.823: e/androidruntime(1815): @ android.view.view.performclick(view.java:4202) 05-10 03:02:19.823: e/androidruntime(1815): @ android.view.view$performclick.run(view.java:17340) 05-10 03:02:19.823: e/androidruntime(1815): @ android.os.handler.handlecallback(handler.java:725) 05-10 03:02:19.823: e/androidruntime(1815): @ android.os.handler.dispatchmessage(handler.java:92) 05-10 03:02:19.823: e/androidruntime(1815): @ android.os.looper.loop(looper.java:137) 05-10 03:02:19.823: e/androidruntime(1815): @ android.app.activitythread.main(activitythread.java:5039) 05-10 03:02:19.823: e/androidruntime(1815): @ java.lang.reflect.method.invokenative(native method) 05-10 03:02:19.823: e/androidruntime(1815): @ java.lang.reflect.method.invoke(method.java:511) 05-10 03:02:19.823: e/androidruntime(1815): @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:793) 05-10 03:02:19.823: e/androidruntime(1815): @ com.android.internal.os.zygoteinit.main(zygoteinit.java:560) 05-10 03:02:19.823: e/androidruntime(1815): @ dalvik.system.nativestart.main(native method) location.setonitemclicklistener(new onitemclicklistener() {
am implementing right way ?? please help!
i have implemented google placesautocomplete
in app, in results/suggestions show not select able on 3.0 or higher
unexpected value nativegetenabledtags: 0
error shows up. code follows:
location.setonitemclicklistener(new onitemclicklistener() {
@override public void onitemclick(adapterview<?> adapterview, view view, int position, long id) { // todo auto-generated method stub autolocation = (places) adapterview.getitematposition(position); location.settext(autolocation.description); location.clearfocus(); destination.requestfocus(); log.d("autocompletetask", location.gettext().tostring()); } }); destination.setadapter(new placesautocompleteadapter(this, r.layout.list_item)); destination.setonitemclicklistener(new onitemclicklistener() { @override public void onitemclick(adapterview<?> adapterview, view view, int position, long id) { // todo auto-generated method stub autodestination = (places) adapterview.getitematposition(position); destination.settext(autodestination.description); destination.clearfocus(); calculate.requestfocus(); log.d("autocompletetask2", destination.gettext().tostring()); } });
it seems code getting data network. have put in workthread, put on doinbackground();
jobj = users.distanceget(location.gettext().tostring(), destination.gettext().tostring());
Comments
Post a Comment