次の問題があります。私はEditText
フィールドを持っているメインスレッドでは、私は無限に受信メッセージのソケットをリッスンAsyncTask
があります。 (doInBackground()
にある)ループではonProgressUpdate()
を呼び出して文字列を渡そうとしていて、oPU()が文字列を受け取ってEditText
をメインスレッドに配置したときに表示する必要があります。EditTextをAsyncTaskと無限ループから更新できません
public class ClientSide extends AsyncTask<String, String, String>{
public EditText field = (EditText) findViewById(R.id.bar1);
...}
最初の問題は、findViewById(R.id.bar1)
というシンボルが解決できないということです。何が原因なのか、どうすれば修正できるのか? 2番目の問題はループの問題です。問題は、定期的に新しいスレッドを作成したくないということです。私の場合、ソケットを作成し、オブジェクトが.execute()であるたびにバインドすることを意味します。私のコードを再構成して、より洗練されたソリューションを作る方法を提案してください。私はAsyncTasks
が短いプロセスでapp-longではないことを知っていますので、私の現在の解決策(ループあり)は分解するニンジン(a.k.a. bad one)です。 もう一度: 1. findViewById()
を実際にEditText
UI要素に一致させる方法を教えてください。 2.アプリケーションがバックグラウンドでメッセージリスナーを実行する必要があるたびに、ソケットを作成しないためにコードを再編成する方法はありますか?
あなたにも非同期.. doInBackgroundを見ることができます:
protected String doInBackground(String... params){
final String SERVER_HOSTNAME = "hereGoesMyIP";
final int SERVER_PORT = 2002;
BufferedReader mSocketReader;
PrintWriter mSocketWriter;
final String TAG = ClientSide.class.getSimpleName();
String outputln = "Me. Android";
try {
//Initialization of the socket, socket reader and writer.
Socket socket = new Socket(SERVER_HOSTNAME, SERVER_PORT);
mSocketReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
mSocketWriter = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
System.out.println("Connected to server " + SERVER_HOSTNAME + ":" + SERVER_PORT);
//An infinite loop which checks for incoming messages.
while(true){
String inMsg="";
String aMessage = "";
//Reads from the socket
if((inMsg=mSocketReader.readLine())!=null && socket.isConnected()){
publishProgress(inMsg);
}
Thread.sleep(500);//still requres try - catch?
}
} catch (IOException ioe) {
System.err.println("Cannot connect to " + SERVER_HOSTNAME + ":" + SERVER_PORT);
ioe.printStackTrace();
}
return null;
}
ありがとうございますrそのような詳細な答え。私は今あなたのソリューションをテストしています。あなたは2)について何かを持っているなら、私はそれを読んでうれしく思います。もう一度、ありがとうございました。私は最高のあなたの答えをチェックすることを願っています。ちょうどそれを実行するために私に1-2分を与える... – KDX2
2)あなたの質問を理解することができた – Jois
あなたは私にあなたの2番目の質問を教えてくださいできますか? – Jois