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

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

ただいまの
回答率

89.99%

Android Studio 初心者です。遷移先の値をデータとして返したいのですが、うまくいきません。

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 324

takusuke

score 8

Intent を用いてbackボタンを押すタイミングで遷移先の値を返したいです。

以下に遷移前のアクティビティのコードを載せます。

package com.example.tokoroshingo.myapplication;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;

(中略)

public class SubActivity3 extends AppCompatActivity {

    public static final String EXTRA_MESSAGE
//            = "com.example.testactivitytrasdata.MESSAGE";
            = "YourPackageName.MESSAGE";
    static final int RESULT_CH1 = 1000;
    private TextView text1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sub3);

       (中略)

        text1 = findViewById(R.id.ch_textView1);
        text1.setText("温度");

        (中略)

     }

   // CH1 からの返しの結果を受け取る
    protected void onActivityResult( int requestCode, int resultCode, Intent intent) {
        super.onActivityResult(requestCode, resultCode, intent);

        if(resultCode == RESULT_OK && requestCode == RESULT_CH1 &&
                null != intent) {
            String res = intent.getStringExtra(SubActivity3.EXTRA_MESSAGE);
            text1.setText(res);
        }
    }

}

次に遷移先のコードを以下に載せます。

package com.example.tokoroshingo.myapplication;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;

(中略)

public class CH1 extends AppCompatActivity {

    private String read;

    (中略)

    public CH1() {
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    (中略)

    Button returnButton5 = findViewById(R.id.return_button);
        returnButton5.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();

                //readにはString型の文字列が格納されている。これを遷移前のアクティビティに返したい

                if (read!= null) {
                    intent.putExtra(SubActivity3.EXTRA_MESSAGE, read);
                }

                setResult(RESULT_OK, intent);

                finish();

            }
        });

    }
}

コードが長くなってしまうため、短くしました。
これを実行し、バックボタンを押した際にデータが返されtext1に値が表示されるようにしたいのです。しかし、バックボタンを押してもtext1は"温度"のままで変更されません。
どこが間違っているのでしょうか、かれこれ1日考えてしまっています、、、。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 3

+1

デバッグ実行して、ブレークポイントを設定して1行ずつ実行する作業は行ってみたでしょうか?

例えば、CH1のintentを設定するところで、

                if (read!= null) {
                    intent.putExtra(SubActivity3.EXTRA_MESSAGE, read);
                }


のifの行にブレークポイントを設定し、ifのブロックの中に本当に入っているのかとか、SubActivity3の

   // CH1 からの返しの結果を受け取る

        if(resultCode == RESULT_OK && requestCode == RESULT_CH1 &&
                null != intent) {
            String res = intent.getStringExtra(SubActivity3.EXTRA_MESSAGE);
            text1.setText(res);
        }


のifの行にやはりブレークポイントを設定し、やはりifのブロックの中に入っていくか、入っていくなら変数resで受け取った値が想定通りになっているか、といったことを調べてみるべきでしょう。

もし、「onActivityResult()を使って遷移先の値を得る」という作業を成功させた実績自体がないのであれば、このプロジェクトは一旦置いておいて、もっと単純なプログラムを作ってonActivityResult()で値を受け取ることを成功させたという経験値を得ることが先決になるかもしれません。そこから見えてくることもあるでしょう。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/05/12 14:20

    ありがとうございます!!
    デバッグがよく分からずの状態であったため、非常に勉強になりました。
    これからも十分に使える知識であるため、ありがたいです。

    キャンセル

+1

SubActivity3からCH1を起動するコード記載されていないのですが、
もしかしてstartActivity()を使っているのではないでしょうか?
呼び出したアクティビティから結果を受け取りたい場合、startActivityForResult()を使います。

公式サイトに使い方が載っているので、こちらをお読み下さい。
https://developer.android.com/training/basics/intents/result?hl=ja

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/05/13 10:05

    ありがとうございます!
    その通りでした汗
    詳しく説明して頂いて感謝です。
    勉強になりました!

    キャンセル

checkベストアンサー

0

RESULT_CH1 リクエストコードを設定していないように見えます。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/05/12 14:18

    ありがとうございます!!
    その通りでした、設定したらうまくいきました。
    感謝です!!!

    キャンセル

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

  • ただいまの回答率 89.99%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる
  • トップ
  • Javaに関する質問
  • Android Studio 初心者です。遷移先の値をデータとして返したいのですが、うまくいきません。