Socketでの接続処理とは別のクラスでデータ送信を行いたい
私はandroidstudioでアプリ開発を行っている初心者です。
MainActivityでSocketの接続処理を行っておりこの処理は動作が確認できました。MyDialogFragmentクラスでダイアログを表示し、ダイアログのOKボタンを押したときに3つのEditTextの内容をサーバーへ送信したいと考えています。
このような場合MainActivityのSocketの内容をMyDialogFragmentに反映させるにはどうしたらいいのでしょうか?
また、Socket.connect();での接続はできるのですが、切断処理がわかりません。こちらもわかる方がいましたらお願いします。
#MainActivity.java
java
1package to.msn.wings.dialogargs; 2 3import androidx.appcompat.app.AppCompatActivity; 4import androidx.fragment.app.DialogFragment; 5 6import android.content.Intent; 7import android.os.Bundle; 8import android.os.Parcelable; 9import android.widget.Button; 10import android.widget.CompoundButton; 11import android.widget.EditText; 12import android.widget.Toast; 13import android.widget.ToggleButton; 14 15import java.io.IOException; 16import java.io.PrintWriter; 17import java.net.InetSocketAddress; 18import java.net.Socket; 19 20public class MainActivity extends AppCompatActivity { 21 22 @Override 23 24 protected void onCreate(Bundle savedInstanceState) { 25 super.onCreate(savedInstanceState); 26 setContentView(R.layout.activity_main); 27 28 Button btn = findViewById(R.id.button1); 29 ToggleButton toggle = findViewById(R.id.toggleButton); 30 31 btn.setOnClickListener(view -> { 32 EditText txtName1 = findViewById(R.id.editText1); 33 EditText txtName2 = findViewById(R.id.editText2); 34 EditText txtName3 = findViewById(R.id.editText3); 35 36 DialogFragment dialog = new MyDialogFragment(); 37 Bundle args = new Bundle(); 38 args.putString("txtName1", txtName1.getText().toString()); 39 args.putString("txtName2", txtName2.getText().toString()); 40 args.putString("txtName3", txtName3.getText().toString()); 41 dialog.setArguments(args); 42 dialog.show(getSupportFragmentManager(), "dialog_basic"); 43 }); 44 45 toggle.setOnCheckedChangeListener((buttonView, isChecked) ->{ 46 String ip = "10.22.18.109"; 47 int port = 50015; 48 InetSocketAddress address = new InetSocketAddress(ip, port); 49 Socket socket = new Socket(); 50 if (isChecked) { 51 new Thread (() -> { 52 try { 53 socket.connect(address, 3000); 54 MainActivity.this.runOnUiThread(() -> 55 Toast.makeText(MainActivity.this, "接続に成功しました。", Toast.LENGTH_LONG).show()); 56 } catch (Exception e) { 57 MainActivity.this.runOnUiThread(() -> 58 Toast.makeText(MainActivity.this, "接続に失敗しました。", Toast.LENGTH_LONG).show()); 59 } 60 PrintWriter pw = null; 61 try { 62 pw = new PrintWriter(socket.getOutputStream(), true); 63 } catch (IOException e) { 64 e.printStackTrace(); 65 } 66 pw.println("タブレット端末接続開始"); 67 }).start(); 68 } else { 69 // The toggle is disabled 70 try { 71 socket.close(); 72 } catch (IOException e) { 73 e.printStackTrace(); 74 } 75 } 76 }); 77 } 78
#MyDialogFragment.java
java
1package to.msn.wings.dialogargs; 2 3import android.app.AlertDialog; 4import android.app.Dialog; 5import android.os.Bundle; 6import android.content.Intent; 7import androidx.annotation.NonNull; 8import androidx.fragment.app.DialogFragment; 9 10import java.io.IOException; 11import java.io.PrintWriter; 12import java.net.Socket; 13 14 15 16public class MyDialogFragment extends DialogFragment { 17 @NonNull 18// @Override 19 /*組立・仕分けST*/ 20 21 22 public Dialog onCreateDialog(Bundle savedInstanceState) { 23 Bundle args = requireArguments(); 24 String txtName1 = args.getString("txtName1"); 25 String txtName2 = args.getString("txtName2"); 26 String txtName3 = args.getString("txtName3"); 27 28 AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 29 30 builder.setTitle(" !!最終確認!!") 31 .setMessage(String.format("X座標 : %30s\n\n" + "Y座標 : %30s\n\n" + "Z座標 : %30s", txtName1, txtName2, txtName3)) 32 .setPositiveButton("OK", (dialog, id) -> { 33 //OKボタンを押したときの動作 34// Socket socket = getIntent().getExtra("txtName"); 35 Socket socket = new Socket(); 36 PrintWriter pw = null; 37 try { 38 pw = new PrintWriter(socket.getOutputStream(), true); 39 pw.println(txtName1); 40 pw.println(txtName2); 41 pw.println(txtName3); 42 } catch (IOException e) { 43 e.printStackTrace(); 44 } 45 }) 46 .setIcon(R.drawable.chuui) 47 .setNegativeButton("キャンセル", null); 48 49 return builder.create(); 50 } 51}
回答1件
あなたの回答
tips
プレビュー