java - networkOnMainThreadException error even with Async -
i'm running following code on android studio , trying make api call semantics interface. async code:
public class downloadtest extends asynctask<void, void, void> { public string results = "hello"; public products products = new products("key", "password"); @override protected void doinbackground(void... params) { // todo auto-generated method stub // call web service here scan me = new scan(); /* build request */ products.productsfield("upc", "883974958450").productsfield("fields", "name", "gtins"); /* make request */ try { results = products.getproducts().tostring(); log.i("try", results); me.set_vars(results); //set_vars method mainactivity.java } catch (exception e) { log.i("mytag0", e.tostring()); } return null; } } i didn't include code onpreexecute() or onpostexecute() because don't have in code methods right now.
in logcat mytag0 see networkonmainthreadexception , i've looked @ other threads , have still unable figure out why i'm getting error. i've included correct internet permissions in androidmanifest
<uses-permission android:name="android.permission.internet" /> <uses-permission android:name="android.permission.write_external_storage"/> in mainactivity.java, make call method doinbackground() following way:
downloadtest work = new downloadtest(); work.doinbackground(); log.i("mytag", my_result); thanks!
edit: error message/trace when app crashes if change statement above work.execute()
07-13 13:25:17.824 2718-2733/com.example.jesarshah.snapcart e/androidruntime﹕ fatal exception: asynctask #1 process: com.example.jesarshah.snapcart, pid: 2718 java.lang.runtimeexception: error occured while executing doinbackground() @ android.os.asynctask$3.done(asynctask.java:304) @ java.util.concurrent.futuretask.finishcompletion(futuretask.java:355) @ java.util.concurrent.futuretask.setexception(futuretask.java:222) @ java.util.concurrent.futuretask.run(futuretask.java:242) @ android.os.asynctask$serialexecutor$1.run(asynctask.java:231) @ java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1112) @ java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:587) @ java.lang.thread.run(thread.java:818) caused by: java.lang.runtimeexception: can't create handler inside thread has not called looper.prepare() @ android.os.handler.<init>(handler.java:200) @ android.os.handler.<init>(handler.java:114) @ android.app.activity.<init>(activity.java:794) @ android.support.v4.app.fragmentactivity.<init>(fragmentactivity.java:76) @ android.support.v7.app.appcompatactivity.<init>(appcompatactivity.java:50) @ android.support.v7.app.actionbaractivity.<init>(actionbaractivity.java:23) @ com.example.jesarshah.snapcart.scan.<init>(scan.java:32) @ com.example.jesarshah.snapcart.downloadtest.doinbackground(downloadtest.java:26) @ com.example.jesarshah.snapcart.downloadtest.doinbackground(downloadtest.java:11) @ android.os.asynctask$2.call(asynctask.java:292) @ java.util.concurrent.futuretask.run(futuretask.java:237) @ android.os.asynctask$serialexecutor$1.run(asynctask.java:231) at java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1112) at java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:587) at java.lang.thread.run(thread.java:818)
do not call doinbackground(). call execute() or executeonexecutor() main application thread.
since, in case, not have onpostexecute() or of other typical asynctask methods, , since on background thread when want work done, either:
just work on background thread on, , rid of
asynctaskentirely, orswitch plain
thread
also note scan object appears either subclass of actionbaractivity or creating instance of actionbaractivity. neither of these possible. never create own instances of activities.
Comments
Post a Comment