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

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -