Android : Activity hangs on TextView.setText()

on Saturday, October 11, 2014


Code first:



public class MyActivity extends Activity {

Button send;
TextView textv;
String answer;

@Override
protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.my_activity);

send = (Button)findViewById(R.id.sendButton);

send.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
MyClientTask myClientTask = new MyClientTask("localhost", 1234, "QUESTION");
myClientTask.execute();
}
});
}


void processAnswer() {
Log.i("DEBUG", "in processAnswer - before setting text");
Log.i("DEBUG", "ANSWER");

textv.setText("ANSWER\n"); // <-------- H E R E -----------

Log.i("DEBUG", "in processAnswer - after setting text");
}



public class MyClientTask extends AsyncTask<Void, Void, Void> {

String dstAddress;
int dstPort;

String message;
String response;

MyClientTask(String addr, int port, String msg){
dstAddress = addr;
dstPort = port;
message = msg;
response = "";
}

@Override
protected Void doInBackground(Void... arg0) {

Socket socket = null;

try {
InetAddress serverAddr = InetAddress.getByName(dstAddress);

socket = new Socket(serverAddr, dstPort);
OutputStream out = socket.getOutputStream();
out.write(message.getBytes());
out.flush();

String msgrc = "";
int charsRead = 0;
char[] inputBuf = new char[4096];

InputStream is = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader in = new BufferedReader(isr);
while ((charsRead = in.read(inputBuf)) != -1) {
msgrc += new String(inputBuf).substring(0, charsRead);
}

// outer class variable
MyActivity.this.answer = msgrc;

out.close();
is.close();
socket.close();


Log.i("DEBUG", "before processing answer");
MyActivity.this.processAnswer();
Log.i("DEBUG", "after processing answer");

} catch (Exception e) {

}

return null;
}
}
}


The code above simply sends some message to a server and receives an answer. This answer should then be displayed in the TextView (see marked line). However, the app hangs at that line, i.e, LogCat displays



[...]
before processing answer
in processAnswer - before setting text
ANSWER


Then no more lines are written to LogCat. Has anybody an explanation for that? If the marked line is commented out, LogCat looks like



[...]
before processing answer
in processAnswer - before setting text
ANSWER
in processAnswer - after setting text
after processing answer

0 comments:

Post a Comment