java - JsonReader running in thread crashes app -
my app crashing unpredictably , don't understand why. i'm using httpurlconnection retrieve json file , i'm trying use jsonreader class read from, , use file. trouble application crashes after reading or doing instance of jsonreader.
i've read input stream scanner causes similar problem. when reading scanner can print small amounts of json server. data server making jsonreader well.
this code:
public class connecttoserver implements runnable { private url connectionurl; private mainactivity output; public connecttoserver(url url, mainactivity mainactivity) { connectionurl = url; output = mainactivity; } public void printerror(string errormessage){ output.output(errormessage); } public inputstream getinputstream(){ try { httpurlconnection connection = (httpurlconnection)connectionurl.openconnection(); inputstream inputstream = new bufferedinputstream(connection.getinputstream()); if (inputstream == null){ printerror("input stream null"); } return inputstream; } catch (ioexception ex){ printerror("io exception has been thrown"); } catch (exception ex){ printerror("normal exception thrown: " + ex.getclass().getsimplename()); } return null; } @override public void run() { inputstream inputstream = getinputstream(); try { if (inputstream == null){ printerror("input stream not initiated"); } else { jsonreader reader = new jsonreader(new inputstreamreader(inputstream, "utf-8")); printerror(reader.tostring()); reader.close(); } } catch (exception ex){ printerror("exception while printing input stream: " + ex.getclass().getsimplename()); } printerror("thread finished"); }
this gets run on thread created in main ui thread.
public void connect(){ output("connect started"); boolean success = true; try { url url = new url("http://geonews.azurewebsites.net/api/location"); serverconnection = new connecttoserver(url,this); thread thread = new thread(serverconnection); thread.start(); } catch (malformedurlexception ex){ output("messed url"); success = false; } if (success){ output("thread has been started"); } else { output("exception thrown while trying run thread"); } }
does know why code causing app crash? if gets "thread finished" crash after.
btw realise should using asynctask i've gone down track , i'd rather going first.
logcat:
06-14 22:45:00.058 4032-4052/com.tomsapps.thomas.jsonreadertestapp e/androidruntime﹕ fatal exception: thread-314 process: com.tomsapps.thomas.jsonreadertestapp, pid: 4032 android.view.viewrootimpl$calledfromwrongthreadexception: original thread created view hierarchy can touch views. @ android.view.viewrootimpl.checkthread(viewrootimpl.java:6247) @ android.view.viewrootimpl.requestlayout(viewrootimpl.java:867) @ android.view.view.requestlayout(view.java:17364) @ android.view.view.requestlayout(view.java:17364) @ android.view.view.requestlayout(view.java:17364) @ android.view.view.requestlayout(view.java:17364) @ android.view.view.requestlayout(view.java:17364) @ android.view.view.requestlayout(view.java:17364) @ android.widget.relativelayout.requestlayout(relativelayout.java:360) @ android.view.view.requestlayout(view.java:17364) @ android.widget.textview.checkforresize(textview.java:6798) @ android.widget.textview.updateafteredit(textview.java:7693) @ android.widget.textview.handletextchanged(textview.java:7709) @ android.widget.textview$changewatcher.ontextchanged(textview.java:9440) @ android.text.spannablestringbuilder.sendtextchanged(spannablestringbuilder.java:964) @ android.text.spannablestringbuilder.replace(spannablestringbuilder.java:515) @ android.text.spannablestringbuilder.append(spannablestringbuilder.java:272) @ android.text.spannablestringbuilder.append(spannablestringbuilder.java:33) @ android.widget.textview.append(textview.java:3616) @ android.widget.textview.append(textview.java:3603) @ com.tomsapps.thomas.jsonreadertestapp.mainactivity.output(mainactivity.java:63) @ com.tomsapps.thomas.jsonreadertestapp.connecttoserver.printerror(connecttoserver.java:26) @ com.tomsapps.thomas.jsonreadertestapp.connecttoserver.run(connecttoserver.java:74) @ java.lang.thread.run(thread.java:818)
i believe output
method mainactivity
modifies textview, therefore triggering exception.
a view hierarchy can changed "main" thread, in case, might want try looking runonuithread
, resources on stackoverflow :
hope helps, luck :)
edit :
you might want use android log
instead of using textview
display errors.
Comments
Post a Comment