非常に単純な双方向 IM アプリをテストしようとしています。クライアントがAndroid上にあり、サーバーが私のPC(Java)上にある場合。PC から PC への Java でこのアプリをテストしましたが、正しく動作します。
しかし、Androidエミュレーターで、PCからAndroidエミュレーターにメッセージを送信すると、PCから2回送信されたときにのみメッセージがAndroidに表示されます。PCから送信ボタンを1回クリックしても何も表示されず、もう一度クリックするとAndroidにメッセージが表示されます。
実行可能なメソッドに問題があると考えていますが、完全にはわかりません。誰かが問題を指摘してくれることを願っています。前もって感謝します。
static Socket kkSocket = null;
static PrintWriter out = null;
static BufferedReader in = null;
static String msg;
TextView tv;
EditText et;
Handler mHandler = new Handler();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView) findViewById(R.id.tv_message);
et = (EditText) findViewById(R.id.et_message);
Button btnSend = (Button) findViewById(R.id.btn_send);
btnSend .setOnClickListener(new View.OnClickListener()
{
public void onClick(View v) {
out.println(et.getText());
}
});
Thread t = new Thread() {
public void run() {
processThread();
}
};
t.start();
}
private void processThread() {
try {
kkSocket = new Socket("xxx.xx.xx.xxx", 4444);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
out = new PrintWriter(kkSocket.getOutputStream(), true);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
in = new BufferedReader(new InputStreamReader(kkSocket.getInputStream()));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
while (in.readLine() != null)
{
msg = in.readLine();
mHandler.post(mUpdateResults);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Runnable mUpdateResults = new Runnable() {
public void run() {
tv.setText("Server: " + msg);
}
};