AsyncTask
を使用してサーバーから複数のメッセージを受信でき、送信方法も知っています。ボタンをクリックしたときにメッセージをサーバーに送信
ボタンの中断/複数のフラグメントからの取り込みを受け取ったときに、どのようにメッセージを送信できるかわかりません。
IフラグメントA上の1つのボタンとフラグメントB.
フラグメントA
public class Fragmento_A extends android.support.v4.app.Fragment{
Button button;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.activity_third,container,false);
button = (Button) v.findViewById(R.id.button);
new Cliente("192.168.2.5",6000,button,Fragment_B.button).execute();
return v;
}
}
フラグメントB
public class Fragmento_B extends android.support.v4.app.Fragment{
public static Button button;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.activity_third,container,false);
button = (Button) v.findViewById(R.id.button);
return v;
}
}
AsyncTask
public class Cliente extends AsyncTask<Void, String, Void> {
String dstAddress;
int dstPort;
Button button,button2
public Cliente(String addr, int port, Button button, Button button2) {
this.button = button;
this.button2 = button2;
}
@Override
protected Void doInBackground(Void... arg0) {
Socket socket = null;
try {
socket = new Socket(dstAddress, dstPort);
while(true) {
//what to do here?
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return null;
}
@Override
protected void onProgressUpdate(String... values) {}
に1つのボタンがボタンはクニックですFragment_Aでkedを送信すると、Button_Aが押され(一度だけ実行されます)、Fragment_BでボタンがクリックされるとButton_Bが押されます(一度だけ実行されます)。
それとも、最も簡単な方法は、サーバーに常にボタンの状態を送信することであり、彼が決定した文字列/ INTを取得するときに、サーバーが処理します...
簡単な解決策があるとは思うが、それはうまくいくかもしれない。誰か他の人が返事をするかどうか見てみましょう。 –
パブリック静的文字列を作成するだけではどうですか?同じじゃない? –
いいえ、それは同じではありません。理論的にはうまくいくが、それはトライドルにとって安全ではない。明らかな理由がなくてもアプリが突然クラッシュする可能性があります。これは、2つのスレッドが同じメモリアドレスに同時にアクセスしようとしたときに発生します。だからあなたはスレッドをブロックします。 BlockingQueueは、問題がBlockingQueueで発生しないように、最初のメッセージが書き込まれるまで2番目のスレッドをブロックします。 – theCNG27