코드 첫번째 TextView.setText()에 달려 :활동
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);
textv = (TextView)findViewById(R.id.textViewv);
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;
}
}
}
코드 위 단순히 서버에 어떤 메시지를 보내고 응답을받습니다. 이 대답은 TextView에 표시되어야합니다 (표시된 선 참조). 그러나 LogCat 디스플레이에서 해당 앱이 멈 춥니 다.
[...]
before processing answer
in processAnswer - before setting text
ANSWER
그러면 LogCat에 더 이상 행이 기록되지 않습니다. 아무에게도 그 이유가 설명되어 있니? 표시된 줄을 주석 경우 대신 onPostExecute()
에 MyActivity.this.processAnswer()
에 전화를 이동하는 경우, 로그 캣이
[...]
before processing answer
in processAnswer - before setting text
ANSWER
in processAnswer - after setting text
after processing answer
여기서 로그 변수는 코드에서 선언 되었습니까? –
죄송합니다. textv 여야합니다. 코드를 수정했습니다. – user236012
여기서 textv는 할당 되었습니까? 당신이 잡으려고 노력했기 때문에 예외는 아닙니다. 응용 프로그램이 nullpointer 예외를 던지고 있습니다 –