Could you help me figure out how to implement Threads for this so that it does not freeze while it is waiting for a response from the server? I tried for 5 hours or so, I just canβt find a way to use it in the stream and then return it to set the text using tv.setText ();
package zee.rhs.dk; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class AndroidClientActivity extends Activity { private String ip = "90.184.254.246"; private int port = 8081; private String line; private TextView tv; private Button btn; private Socket socket; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); tv = (TextView) findViewById(R.id.tv); btn = (Button) findViewById(R.id.btn); btn.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { BufferedReader in = null; PrintWriter out = null; try { socket = new Socket(ip, port); out = new PrintWriter(socket.getOutputStream(), true); out.println("update"); in = new BufferedReader(new InputStreamReader(socket .getInputStream())); while ((line = in.readLine()) == null) { } tv.setText(line); } catch (UnknownHostException e) { Toast.makeText(AndroidClientActivity.this, "Can't reach ip: " + ip, Toast.LENGTH_LONG).show(); e.printStackTrace(); } catch (IOException e) { Toast.makeText(AndroidClientActivity.this, "Accept failed at port: " + port, Toast.LENGTH_LONG) .show(); e.printStackTrace(); } finally { out.close(); } } }); } }
source share