前提・実現したいこと
pcとandroidのソケット通信で、android(クライアント側)に表示された内容(文章)を活用したい。
クライアント側に表示された文章をロボット等に渡して話してもらうなどを行いたい。
発生している問題
どの部分を活用すればいいのかわからない 画面に表示された文章はどこの変数で渡しているのか知りたい
該当のソースコード
java
1 2 3=================MainActivity.java================ 4 5import android.annotation.SuppressLint; 6import android.os.Message; 7import android.support.v7.app.AppCompatActivity; 8import android.os.Bundle; 9import android.view.View; 10import android.widget.Button; 11import android.widget.EditText; 12import android.widget.TextView; 13import android.view.View.OnClickListener; 14import android.os.Handler; 15 16public class MainActivity extends AppCompatActivity { 17 EditText input; 18 TextView show; 19 Button send; 20 Handler handler; 21 22 // サーバと通信するスレッド 23 ClientThread clientThread; 24 25 @SuppressLint("HandlerLeak") 26 @Override 27 public void onCreate(Bundle savedInstanceState) { 28 super.onCreate(savedInstanceState); 29 setContentView(R.layout.activity_main); 30 31 // view取得 32 input = (EditText) findViewById(R.id.input); 33 send = (Button) findViewById(R.id.send); 34 show = (TextView) findViewById(R.id.show); 35 36 handler = new Handler() { 37 @Override 38 public void handleMessage(Message msg) { 39 // サブスレッドからのメッセージ 40 if (msg.what == 0x123) { 41 // 表示する 42 show.append("\n" + msg.obj.toString()); 43 } 44 } 45 }; 46 clientThread = new ClientThread(handler); 47 // サーバ接続スレッド開始 48 new Thread(clientThread).start(); 49 send.setOnClickListener(new OnClickListener() { 50 @Override 51 public void onClick(View v) { 52 try { 53 // メッセージ送信 54 Message msg = new Message(); 55 msg.what = 0x345; 56 msg.obj = input.getText().toString(); 57 clientThread.revHandler.sendMessage(msg); 58 // テキストクリア 59 input.setText(""); 60 } catch (Exception e) { 61 e.printStackTrace(); 62 } 63 } 64 }); 65 66 } 67 } 68 69 70 71 72=================ClientThread.java================ 73 74import android.os.Handler; 75import android.os.Looper; 76import android.os.Message; 77import java.io.BufferedReader; 78import java.io.IOException; 79import java.io.InputStreamReader; 80import java.io.OutputStream; 81import java.net.Socket; 82import java.net.SocketTimeoutException; 83 84 85public class ClientThread implements Runnable { 86 87 private Socket s; 88 private Handler handler; 89 public Handler revHandler; 90 BufferedReader br = null; 91 OutputStream os = null; 92 93 public ClientThread(Handler handler) { 94 this.handler = handler; 95 } 96 97 public void run() { 98 try { 99 s = new Socket("192.168.11.7", 31234); 100 br = new BufferedReader(new InputStreamReader(s.getInputStream())); 101 os = s.getOutputStream(); 102 // スレッド起動 103 new Thread() { 104 @Override 105 public void run() { 106 String content = null; 107 // Socketのinputストリーム読み取り 108 try { 109 while ((content = br.readLine()) != null) { 110 // Mainスレッドに通知 111 Message msg = new Message(); 112 msg.what = 0x123; 113 msg.obj = content; 114 handler.sendMessage(msg); 115 } 116 } catch (IOException e) { 117 e.printStackTrace(); 118 } 119 } 120 }.start(); 121 // Lopper初期化 122 Looper.prepare(); 123 revHandler = new Handler() { 124 @Override 125 public void handleMessage(Message msg) { 126 // UIスレッドメッセージ取得 127 if (msg.what == 0x345) { 128 // サーバにチャット内容送信 129 try { 130 os.write((msg.obj.toString() + "\r\n") 131 .getBytes("utf-8")); 132 } catch (Exception e) { 133 e.printStackTrace(); 134 } 135 } 136 } 137 }; 138 // Looper起動 139 Looper.loop(); 140 } catch (SocketTimeoutException e1) { 141 System.out.println("TIME OUT!!"); 142 } catch (Exception e) { 143 e.printStackTrace(); 144 } 145 } 146 147} 148 149
試したこと
androidstudioで実際にビルド
動きを試す
ソースコードを眺める
補足情報(FW/ツールのバージョンなど)
androidstudio 3.1
java8
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/27 02:57