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

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

ただいまの
回答率

89.98%

シンボルを見つけられません Run エラー

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 2,340

H30_inenaga

score 16

 解決したい課題

Runエラーの解決及び実行することです。

何の作業をしていたのか

SocketClient.javaを作成し、AndroidStudioでRun'app'を実行して、スマホにより動作確認をする予定だった。

エラーメッセージ

  • Error:(47, 55) エラー: シンボルを見つけられません
    シンボル:   変数 addressEditText
    場所: クラス id
  • Error:(48, 52) エラー: シンボルを見つけられません
    シンボル:   変数 portEditText
    場所: クラス id
  • Error:(49, 48) エラー: シンボルを見つけられません
    シンボル:   変数 responseTextView
    場所: クラス id
  • Error:(51, 49) エラー: シンボルを見つけられません
    シンボル:   変数 timer
    場所: クラス id
  • Error:(55, 49) エラー: シンボルを見つけられません
    シンボル:   変数 start_button
    場所: クラス id
  • Error:(57, 50) エラー: シンボルを見つけられません
    シンボル:   変数 start_button2
    場所: クラス id
  • Error:(59, 50) エラー: シンボルを見つけられません
    シンボル:   変数 start_button3
    場所: クラス id
  • Error:(61, 50) エラー: シンボルを見つけられません
    シンボル:   変数 start_button4
    場所: クラス id
  • Error:(65, 55) エラー: シンボルを見つけられません
    シンボル:   変数 stop_button
    場所: クラス id
  • Error:Execution failed for task ':app:compileDebugJavaWithJavac'.

Compilation failed; see the compiler error output for details.

 Mainactivity.java (エラーメッセージに関係のあるソースコード)

import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.Locale;

import static com.example.●●●.socketclient.Globalclass.aizu;

public class MainActivity extends AppCompatActivity implements
        Runnable, View.OnClickListener {

    private long startTime;

    TextView response;
    EditText editTextAddress, editTextPort;

    private TextView timerText;
    private Button startButton;
    private Button startButton2;
    private Button startButton3;
    private Button startButton4;

    private final Handler handler = new Handler();
    private volatile boolean stopRun = false;

    private SimpleDateFormat dataFormat =
            new SimpleDateFormat("mm:ss.SS", Locale.JAPAN);
    Globalclass globalclass;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editTextAddress = (EditText) findViewById(R.id.addressEditText);
        editTextPort = (EditText) findViewById(R.id.portEditText);
        response = (TextView) findViewById(R.id.responseTextView);

        timerText = (TextView) findViewById(R.id.timer);
        timerText.setText(dataFormat.format(0));
        //タイマーを設置する

        startButton = (Button) findViewById(R.id.start_button);
        startButton.setOnClickListener(this);
        startButton2 = (Button) findViewById(R.id.start_button2);
        startButton2.setOnClickListener(this);
        startButton3 = (Button) findViewById(R.id.start_button3);
        startButton3.setOnClickListener(this);
        startButton4 = (Button) findViewById(R.id.start_button4);
        startButton4.setOnClickListener(this);
        //タップボタンを設置する

        Button stopButton = (Button) findViewById(R.id.stop_button);
        stopButton.setOnClickListener(this);
        //ストップボタンも設置

    }

    @Override
    public void onClick(View arg0) {
        Thread thread;
        // if分を用いてタップボタンごとにパターンを変える
        if (arg0 == startButton){
            aizu=1;
            stopRun = false;
            thread = new Thread(this);//スレッド作成
            thread.start();
            Client myClient = new Client(editTextAddress.getText()
                    .toString(), Integer.parseInt(editTextPort
                    .getText().toString()), response);//clientクラスにポート番号、IPアドレスを渡す。
            myClient.execute();

            startTime = System.currentTimeMillis();

        }else if(arg0==startButton2){
            aizu=2;
            stopRun = false;
            thread = new Thread(this);
            thread.start();
            Client myClient = new Client(editTextAddress.getText()
                    .toString(), Integer.parseInt(editTextPort
                    .getText().toString()), response);
            myClient.execute();

            startTime = System.currentTimeMillis();
        }else if(arg0==startButton3){
            aizu=3;
            stopRun = false;
            thread = new Thread(this);
            thread.start();
            Client myClient = new Client(editTextAddress.getText()
                    .toString(), Integer.parseInt(editTextPort
                    .getText().toString()), response);
            myClient.execute();

            startTime = System.currentTimeMillis();
        }else if(arg0==startButton4){
            aizu=4;
            stopRun = false;
            thread = new Thread(this);
            thread.start();
            Client myClient = new Client(editTextAddress.getText()
                    .toString(), Integer.parseInt(editTextPort
                    .getText().toString()), response);
            myClient.execute();

            startTime = System.currentTimeMillis();
        }
        else{
            stopRun = true;
            timerText.setText(dataFormat.format(0));
        }
    }

    @Override
    public void run() {//ストップウオッチの機能を作る
        // 10 msec order
        int period = 10;

        while (!stopRun) {
            // sleep: period msec
            try {
                Thread.sleep(period);
            }
            catch (InterruptedException e) {
                e.printStackTrace();
                stopRun = true;
            }

            handler.post(new Runnable() {
                @Override
                public void run() {
                    long endTime = System.currentTimeMillis();
                    // カウント時間 = 経過時間 - 開始時間
                    long diffTime = (endTime - startTime);

                    timerText.setText(dataFormat.format(diffTime));

                }
            });
        }
    }
}

 Client.java

import android.os.AsyncTask;
import android.widget.TextView;

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

import static com.example.●●●.socketclient.Globalclass.aizu;

public class Client extends AsyncTask<Void, Void, Void> {

    String dstAddress;
    int dstPort;
    String response = "";
    TextView textResponse;

    int w=1;
    int b=2;

    Client(String addr, int port,TextView textResponse) {//MainActivityからIPアドレスとポート番号を受け取る
        dstAddress = addr;
        dstPort = port;
        this.textResponse=textResponse;
    }


    @Override
    protected Void doInBackground(Void... arg0) {

        Socket socket = null;

        try {

            socket = new Socket(dstAddress, dstPort);
            String msgReply="1";
            String msgReply2="2";
            String msgReply3="3";
            String msgReply4="4";
            OutputStream outputStream = socket.getOutputStream();//出力ストリームを作る

            if(aizu==1) {//聴覚障がい者の受講者が持つスマートフォンに送信し、テキストに送信した値を表示する
                byte[] w = msgReply.getBytes("UTF-8");
                outputStream.write(w);
                outputStream.flush();
                response += msgReply + "\n";
            }
            if(aizu==2) {//聴覚障がい者の受講者が持つスマートフォンに送信し、テキストに送信した値を表示する
                byte[] w = msgReply2.getBytes("UTF-8");
                outputStream.write(w);
                outputStream.flush();
                response += msgReply2 + "\n";
            }
            if(aizu==3) {//聴覚障がい者の受講者が持つスマートフォンに送信し、テキストに送信した値を表示する
                byte[] w = msgReply3.getBytes("UTF-8");
                outputStream.write(w);
                outputStream.flush();
                response += msgReply3 + "\n";
            }
            if(aizu==4) {//聴覚障がい者の受講者が持つスマートフォンに送信し、テキストに送信した値を表示する
                byte[] w = msgReply4.getBytes("UTF-8");
                outputStream.write(w);
                outputStream.flush();
                response += msgReply4 + "\n";
            }



        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            response = "UnknownHostException: " + e.toString();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            response = "IOException: " + e.toString();
        } finally {
            if (socket != null) {
                try {
                    socket.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        textResponse.setText(response);
        super.onPostExecute(result);
    }

}

 Globalclass.java

import android.app.Application;

public class Globalclass extends Application {
    static int aizu;
    public void GlabalsAllInit(){
        aizu=0;
    }
}

 調べたこと

http://doshirouto.wp.xdomain.jp/java/java_study/2380
上記のURLより、
(1)定義していないメソッド、変数などを使用している。
※特に、変数を指定したクラスの外から変数を使用しようとするパターンが多い。
(2)オブジェクトが正しく生成されていない。
※new忘れが多い。
(3)公開されていないメンバーを呼び出している。
※public、protectedを確認。
(4)クラスが正しく読み込めていない。
※import忘れ、extends忘れ、implements忘れに注意
であることは知っているのですが、どのミスが影響しているか自分では判断できていません。

変数(※timerだとか、startbuttonだとか)に対するxmlファイルが出来ていないことが原因かなと考えているのですが、助言をお願いしますm(_ _)m

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

R.layout.activity_mainやR.id.addressEditTextのようなRというクラスは、XMLファイルの記述によって自動生成されるR.javaを参照しています。「変数に対するXMLファイルが出来る」のではなく「XMLファイルの内容に応じてR.javaが出来る」という方向です。ですから考え方が逆です。

例として、レイアウトXMLファイルで

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textview1" />

のように記述すれば、R.idにtextview1という名前の値が追加されます。今回の例で言えば、activity_main.xmlに記述したタグに、timerとかstartbuttonのような名前を間違いなく与えているでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/13 02:54

    activity_main.xmlの記述のタグにところどころミスが見られたので、修正しました。
    その結果、実行が出来ました。
    色々と聞きたいことはございますが、ひとまずこの質問の回答になっていますのでBAをつけさせていただきます。

    キャンセル

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

  • ただいまの回答率 89.98%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる