I am trying to call a PHP script over my server using the code shown below. This code is giving me very strange results. Occasionally it will desplay the result desired from the PHP command but 9/10 it just displays a blank screen.
I am getting this in Logcat:
Only the original thread that created a view hierarchy can touch it's views?
How can I change my code to always display results?
note: I have seen this answer but I am not sure how to relate it to my specific code.
Android activity code:
public class SimpleServer extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.simpleserver);
final TextView testView= (TextView)findViewById(R.id.tvSimpleServer);
Thread thread = new Thread(new Runnable(){
@Override
public void run() {
try {
Log.d("start", "start");
String link = "http://www.cs.qub.ac.uk/40006697/server2.php?command=getAnimalSound&animal=bird";
try {
URL url = new URL(link);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet();
try {
request.setURI(new URI(link));
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.d("abouttorequest", "about to req");
HttpResponse response = null;
try {
response = client.execute(request);
Log.d("afterrequest", "after req");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
//String test= in.toString();
String line;
while ((line = in.readLine()) != null) {
testView.setText("Response: " + line);
}
Log.d("testingscript", "hello");
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
thread.start();
}
}
Logcat report (note that about to req, after req etc are trace code Logs):
08-07 20:07:02.646: D/AbsListView(10298): onVisibilityChanged() is called, visibility : 0
08-07 20:07:02.646: D/AbsListView(10298): unregisterIRListener() is called
08-07 20:07:02.666: D/AbsListView(10298): unregisterIRListener() is called
08-07 20:07:03.487: D/AbsListView(10298): unregisterIRListener() is called
08-07 20:07:03.487: W/ApplicationPackageManager(10298): getCSCPackageItemText()
08-07 20:07:03.517: D/start(10298): start
08-07 20:07:03.517: D/abouttorequest(10298): about to req
08-07 20:07:03.637: D/afterrequest(10298): after req
08-07 20:07:03.637: W/System.err(10298): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
08-07 20:07:03.637: W/System.err(10298): at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6909)
08-07 20:07:03.637: W/System.err(10298): at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:1054)
08-07 20:07:03.637: W/System.err(10298): at android.view.View.requestLayout(View.java:17321)
08-07 20:07:03.637: W/System.err(10298): at android.view.View.requestLayout(View.java:17321)
08-07 20:07:03.647: W/System.err(10298): at android.view.View.requestLayout(View.java:17321)
08-07 20:07:03.647: W/System.err(10298): at android.view.View.requestLayout(View.java:17321)
08-07 20:07:03.647: W/System.err(10298): at android.view.View.requestLayout(View.java:17321)
08-07 20:07:03.647: W/System.err(10298): at android.widget.TextView.checkForRelayout(TextView.java:8003)
08-07 20:07:03.647: W/System.err(10298): at android.widget.TextView.setText(TextView.java:4840)
08-07 20:07:03.647: W/System.err(10298): at android.widget.TextView.setText(TextView.java:4672)
08-07 20:07:03.647: W/System.err(10298): at android.widget.TextView.setText(TextView.java:4647)
08-07 20:07:03.647: W/System.err(10298): at com.example.brianapp.SimpleServer$1.run(SimpleServer.java:103)
08-07 20:07:03.647: W/System.err(10298): at java.lang.Thread.run(Thread.java:841)
08-07 20:07:03.938: D/AbsListView(10298): onVisibilityChanged() is called, visibility : 4
08-07 20:07:03.938: D/AbsListView(10298): unregisterIRListener() is called