私は現在、端末で実行される単純な Java プログラムである、Android とサーバー間のソケット通信を開発しています。アプリケーションを閉じたときに常にlogCatに警告が表示されることを除いて、物事は順調に進んでいます:
IInputConnectionWrapper showStatusIcon on inactive InputConnection
StackOverflow Similar Problemで投稿を見つけた問題を見つけるためにインターネットで検索しています。違いは、自分のプログラムで情報をうまく送受信できることです。この同様の問題に対する答えは、接続が閉じられていないことです。手術後に電話しなかったということsocket.close();
ですか?これは、実装のより複雑な問題につながります。
まず第一に、サーバーをリッスンして送信する単一の静的ソケットが必要です。何かを送信するたびにソケットを閉じるとは限らないため、リスナーが作業を終了した後にソケットを閉じます。
詳細コードは以下に掲載されています
コンストラクターで接続を次のように初期化します。
client = new Socket(mServerName, mport);
out = new DataOutputStream(client.getOutputStream());
inFromServer = new InputStreamReader(client.getInputStream());
reader = new BufferedReader(inFromServer);
そして、プロセス全体を通してそれらをそこに置いておきます。
Androidからサーバーへの送信を次のように関数に書きました:
public void sendRequest(int type, int what1, int what2, Object data)
{
try{
if(client.isConnected())
{
out.writeUTF(encoded(type,what1,what2,data) + "\n");
}
}catch(IOException e){
Log.e(TAG, "IOException at SendRequest");
e.printStackTrace();
}
}
新しいスレッドのリスナー:
try {
String line = null;
while ((line = reader.readLine()) != null)
{
ReceiveHandler(line);
}
} catch (IOException e) {
Log.e(TAG, "IOException at StartListen");
e.printStackTrace();
}finally{
try {
// The Only Place that I close the Socket
inFromServer.close();
out.close();
reader.close();
client.close();
} catch (IOException e) {
Log.e(TAG, "Close Socket with IOException " + e.toString());
e.printStackTrace();
}
}
私の質問は:
私の実装に何か問題がありますか、それともこれを行うためのより良い方法はありますか?
助けてくれてどうもありがとう!