質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Android Emulator

Android EmulatorはアンドロイドのOSで起動しているアンドロイドのデバイスの機能をシミュレートするソフトウェアです。Emulatorは開発者に複数の違う設定を持ったデバイスを必要とすることなくアプリケーションを開発しテストすることが可能になります。

Q&A

解決済

1回答

458閲覧

pcとandroidのソケット通信で内容を受け渡ししたい

sfgwsdk

総合スコア11

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Android Emulator

Android EmulatorはアンドロイドのOSで起動しているアンドロイドのデバイスの機能をシミュレートするソフトウェアです。Emulatorは開発者に複数の違う設定を持ったデバイスを必要とすることなくアプリケーションを開発しテストすることが可能になります。

0グッド

0クリップ

投稿2019/06/24 07:23

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

何が質問の主体なのかよくわからないのですが、サーバーから受け取った文字列をAndroidアプリのTextViewに表示しているのは、MainActivity.javaの

java

1 handler = new Handler() { 2 @Override 3 public void handleMessage(Message msg) { 4 // サブスレッドからのメッセージ 5 if (msg.what == 0x123) { 6 // 表示する 7 show.append("\n" + msg.obj.toString()); 8 } 9 } 10 };

の部分でしょう。受け取った一文をTextViewにappendするのみではなく、

java

1 // サブスレッドからのメッセージ 2 if (msg.what == 0x123) { 3 // サーバーから受け取った文字列 4 String str = msg.obj.toString(); 5 // 表示する 6 show.append("\n" + str); 7 /* 8 ロボットにstrを渡すための処理をここに書く 9 */ 10 }

といった感じでイメージで作成すればいいのではないでしょうか。

という回答でいいのでしょうか・・・?

投稿2019/06/24 12:40

keicha_hrs

総合スコア6768

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sfgwsdk

2019/06/27 02:57

なるほど、msg.obj.stringをstringで宣言して受け渡しができるようにするわけですね。 少し考えてみます。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問