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

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

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

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

Android Studio

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

Q&A

1回答

759閲覧

AndroidStudio ソケット通信 handler() で困ったこと

H30_inenaga

総合スコア18

Java

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

Android Studio

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

0グッド

0クリップ

投稿2018/06/18 09:13

編集2018/06/18 09:16

解決したいこと

・ソケット通信のプログラムを作成中。
→プログラムのソースコード(SocketEX)は、本をそのままコピペしましたので、エラーはないと仮定。
・handler()が作動しない。←今回のエラー
→handler()を作動させたい!!!←今回の解決課題

エラーメッセージ

Error:(37, 19) エラー: シンボルを見つけられません
シンボル: クラス Handler
場所: クラス SocketEx
Error:(19, 8) エラー: SocketExはabstractでなく、OnClickListener内のabstractメソッドonClick(View)をオーバーライドしません
Error:(37, 41) エラー: シンボルを見つけられません
シンボル: クラス Handler
場所: クラス SocketEx
Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
Compilation failed; see the compiler error output for details.
###ソースコード(SocketEX.Java)
長いのですが全部、見てもらいたいわけではないです。
//ハンドラ
//ハンドラの生成  といったコメントのついたコード付近を中心に見ていただければ幸いです。

Java

1import android.graphics.Color; 2import android.support.v7.app.AppCompatActivity; 3import android.os.Bundle; 4import android.app.Activity; 5import android.view.View; 6import android.view.ViewGroup; 7import android.view.Window; 8import android.widget.Button; 9import android.widget.EditText; 10import android.widget.LinearLayout; 11import android.widget.TextView; 12import java.io.InputStream; 13import java.io.OutputStream; 14import java.net.Socket; 15import static android.R.attr.port; 16 17//ソケット通信 18public class MainActivity extends Activity 19 implements View.OnClickListener{ 20 private final static String BR = System.getProperty("line.separator"); 21 private final static int WC = ViewGroup.LayoutParams.WRAP_CONTENT; 22 private final static int MP = ViewGroup.LayoutParams.MATCH_PARENT; 23 24 //IPアドレスの指定 25 private final static String IP = "192.168.100.6";//変更必須 26 27 private TextView lblReceive; //受信ラベル 28 private EditText edtSend; //送信エディットテキスト 29 private Button btnSend; //送信ボタン 30 31 private Socket socket ; //ソケット 32 private InputStream in; //入力ストリーム 33 private OutputStream out; //出力ストリーム 34 private boolean eroor; //エラー 35 36 private final Handler handler = new Handler();//ハンドラ 37 38 //アクティビティ起動時に呼ばれる 39 @Override 40 public void onCreate(Bundle bundle) { 41 super.onCreate(bundle); 42 requestWindowFeature(Window.FEATURE_NO_TITLE); 43 44 //レイアウトの生成 45 LinearLayout layout = new LinearLayout(this); 46 layout.setBackgroundColor(Color.WHITE); 47 layout.setOrientation(LinearLayout.VERTICAL); 48 setContentView(layout); 49 50 //送信エディトテキストの生成 51 edtSend = new EditText(this) ; 52 edtSend.setText(""); 53 edtSend.setOnClickListener(this); 54 layout.addView(edtSend); 55 56 //送信ボタンの生成 57 btnSend = new Button(this) ; 58 btnSend.setText("送信"); 59 btnSend.setOnClickListener(this); 60 layout.addView(btnSend); 61 62 //受信ラベルの生成 63 lblReceive = new TextView(this); 64 lblReceive.setText(""); 65 lblReceive.setTextSize(16.0f); 66 lblReceive.setTextColor(Color.BLACK); 67 lblReceive.setLayoutParams(new LinearLayout.LayoutParams(MP,WC)); 68 layout.addView(lblReceive); 69 } 70 //アクティビティ開始時に呼ばれる 71 @Override 72 public void onStart() { 73 super.onStart(); 74 75 //スレッドの生成 76 Thread thread = new Thread(){ 77 public void run() { 78 try { 79 connect(IP, 8081); 80 } catch (Exception e) { 81 } 82 } 83 }; 84 thread.start(); 85 } 86 87 //アクティビティの停止時に呼ばれる 88 @Override 89 public void onStop(){ 90 super.onStop(); 91 disconnect(); 92 } 93 //受信テキストの追加 94 private void addText(final String text) { 95 //ハンドラの生成 96 handler.post(new Runnable(){ 97 public void run() { 98 lblReceive.setText(text+BR+lblReceive.getText()); 99 } 100 }); 101 } 102 103 // 接続 104 private void connect(String ip, int post) { 105 int size ; 106 String str ; 107 byte[] w = new byte[1024] ; 108 try{ 109 //ソケット通信 110 addText("接続中"); 111 socket = new Socket(ip, port) ; 112 in = socket.getInputStream() ; 113 out = socket.getOutputStream(); 114 addText("接続完了"); 115 116 //受信ループ 117 while (socket != null && socket.isConnected()) { 118 //データの受信 119 size = in.read(w); 120 if (size <= 0) continue ; 121 str = new String(w, 0, size, "UTF-8"); 122 123 //ラベルへの文字追加 124 addText("通信失敗しました"); 125 } 126 } catch (Exception e) { 127 addText("通信失敗しました"); 128 } 129 } 130 131 //切断 132 private void Disconnect() { 133 try { 134 socket.close(); 135 socket = null ; 136 } catch (Exception e) { 137 } 138 } 139 140 //ボタンクリックイベントの処理 141 public void onClick(View v) { 142 //スレッドの生成 143 Thread thread = new Thread(new Runnable() {public void run(){ 144 eroor = false ; 145 try { 146 //データの送信 147 if (socket != null && socket.isConnected()){ 148 byte[] w = edtSend.getText().toString().getBytes("UTF8"); 149 out.write(w) ; 150 out.flush(); 151 } 152 } catch (Exception e) { 153 error = true ; 154 } 155 //ハンドラの生成 156 handler.post(new Runnable(){ public void run(){ 157 if(!error){ 158 edtSend.setText(""); 159 } else { 160 addText("通信失敗しました"); 161 } 162 }}); 163 }}); 164 thread.start(); 165 } 166}

###参考URL
http://d.hatena.ne.jp/sankumee/20120329/1333021847
↑結局意味が掴めませんでした。

他にも色々と質問しております。文面からはさっぱりとしてさほど困ってなさそうにお見受けされるかもしれませんが、本当に試行錯誤していますので、ちょこちょこでも構いませんから何とぞよろしくお願いします(;_;)。

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

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

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

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

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

guest

回答1

0

import文にandroid.os.Handlerがありません。これではHandlerの名前解決ができないでしょう。まずこの一文の追記が必要で、それを行ってからどうなるかでしょう。

それからいくつかtypo(打ち間違え)と思われるものが見られますが。

Java

1import android.os.Handler; // これを追加 2 3import static android.R.attr.port; // これは誤importと思われます。削るべき 4 5 private boolean eroor; // errorの打ち間違え? 6 7 // 接続 8 private void connect(String ip, int post) { 9 // 中略 10 socket = new Socket(ip, port) ; // 引数名(post)と一致しない。static importのために名前解決されてしまっているが、これでは正常動作しないでしょう 11 // 中略 12 } 13 14 //切断 15 private void Disconnect() { // 呼び出しはdisconnect()と頭が小文字になっている 16 17 //ボタンクリックイベントの処理 18 public void onClick(View v) { 19 20 eroor = false ; // errorの打ち間違え? 21 22 } catch (Exception e) { 23 error = true ; // ここはerrorになっている 24 } 25 26 27 //ハンドラの生成 28 handler.post(new Runnable(){ public void run(){ 29 if(!error){ // ここもerrorになっている 30

投稿2018/06/18 09:39

編集2018/06/18 09:47
keicha_hrs

総合スコア6768

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

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

H30_inenaga

2018/06/18 10:31

回答ありがとうございます。 言われたことを修正しましたら、以下のエラーメッセージとなりました。 Error:(19, 8) エラー: SocketExはabstractでなく、OnClickListener内のabstractメソッドonClick(View)をオーバーライドしません Error:Execution failed for task ':app:compileDebugJavaWithJavac'. > Compilation failed; see the compiler error output for details. もともと、MainActivity.javaという名前で作成していました。 が、ビルドした直後、socketEx.javaが作られました。 どのように直せば良いでしょうか? 必要ならば写真を掲載し、質問を修正させていただきます。
H30_inenaga

2018/06/18 10:41 編集

そういえば、最初、プロジェクトツールから新規クラスとして、SocketEx.javaを作っていたことを思い出しました。 そのあと、MainActivity.javaがあるのに、何故、わざわざSocketEx.javaを作って書かなければならないか分からず、MainActivity.javaに書き直してSocketEx.javaを放置していました。消した方がよろしいでしょうか。 それとも、SocketEx.javaに修正した自分のプログラムをコピペし、MainActivity.javaは何もない状態(初期状態)にするのがよろしいでしょうか?
H30_inenaga

2018/06/18 13:24

SocketEx.javaを消すことでビルドが出来ました。 しかし、ソケット通信の使い方が分かりません。本には何も書かれておりません。 ソケット通信を行う前にチャットサーバーの実行とチャットクライアントの通信先の設定が必要とありますが、具体的にどのようなことでしょうか?
keicha_hrs

2018/06/18 14:10 編集

なんかいろいろ混乱したみたいだけど、解決したということでいいのでしょうかね?結局、MainActivity.javaを残したようですが、「最初のActivity」がMainActivity.javaという名前でなければならない決まり事はないので、あまりこだわらない方がいいかと思います。 > しかし、ソケット通信の使い方が分かりません。本には何も書かれておりません。 うーん、それは別途ソケット通信の学習が必要になると思いますよ。何の本をご覧になっているのかわかりませんが、Android Studioによる開発が中心の本であるなら、他の技術を詳細に解説するところまでは手が回らないと思います。まず、PC上で動くサーバーとクライアントになるプログラムをJavaで作ってみてはどうでしょうか。例えば以下のページは参考になると思います。 http://kmaebashi.com/programmer/webserver/tcpserver.html
H30_inenaga

2018/06/27 03:30

すみません。別の質問になりますが、コマンドプロンプトで、 javac (AndroidStudio で作成したプログラム名).java を入力してファイルが見つからないと出たのは普通ですか? 例として、Android Studioで プロジェクト名abcで、def.javaを作成したとき、コマンドプロンプトでdef.javaはコンパイルできないか、という質問です。
keicha_hrs

2018/06/28 15:03

「コマンドプロンプト」というのは、Android Studio内のビューとして存在するTerminalのことですか?Android Studioでプロジェクトを作成すると、デフォルトではユーザーフォルダー直下に作られたAndroidStudioProjectsというフォルダーの中に作成ファイルが構成されます。そこから見たときに、新規でdef.javaを作ったのなら、 AndroidStudioProjects\<プロジェクト名>\app\src\main\java\<パッケージ名の階層>\def.java という非常に深い場所に作られています。<パッケージ名の階層>というのは、com.example.myapplicationというパッケージ名で作成したのなら、 com\example\myapplication\ のように、ドット区切りをフォルダー階層に置き換えたものになります。・・・と言って通じるのかなあ・・・。エクスプローラーで開いてみて追ってみていただくしかないと思いますが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問