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

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

ただいまの
回答率

88.93%

ボタンごとに違ったデータを受け渡す

解決済

回答 2

投稿 編集

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

syosinsya12

score 69

まだデータ入力の途中ではあるのですが、Aの画面で押されたボタンによってそれぞれ違った数値をInput、Resultと受け渡していきResultの計算で使用したいです。
例えばa1をおすと1218.0と99.9、a2をおすと4562.0と245.5をResultの計算に代入したいという仕組みです。a3,a4,,,,に関してもこれからデータを入れていくつもりです。

以下のように書いてみたのですが、今のままだとResultまで121.8,99.9といった値の受け渡しができていないようです。値がnullとなってしまっていました。
受け渡しでどこが間違えているのか教えていただきたいです。

またボタンごとに違った値を受け渡すのにいまのコードであっているのでしょうか?

<LinearLayout>

    <ScrollView>

<LinearLayout">


    <Button
        android:id="@+id/a1"
        android:onClick="get_a1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/a1"/>
    <Button
        android:id="@+id/a2"
        android:onClick="get_a2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/a2"/>
    <Button
        android:id="@+id/a3"
        android:onClick="get_a3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/a3"/>
    <Button
        android:id="@+id/a4"
        android:onClick="get_a4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/a4"/>

    <Button
        android:id="@+id/a5"
        android:onClick="get_a5"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/a5"/>


</LinearLayout>

</ScrollView>

</LinearLayout>


public class A extends AppCompatActivity {

    public final static String A1_AVE = "com.example.sample.name.A1_AVE";
    public final static String A1_PRO = "com.example.sample.name.A1_PRO";
    public final static String A2_AVE = "com.example.sample.name.A1_AVE";
    public final static String A2_PRO = "com.example.sample.name.A1_PRO";

    double a1_ave = 1218.0;
    double a1_pro = 99.9;
    double a2_ave = 4562.0;
    double a2_pro = 245.5;

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

    public void get_a1 (View view){
        Intent intent = new Intent(this,Input.class);
        intent.putExtra(A1_AVE,a1_ave);
        intent.putExtra(A1_PRO,a1_pro);
        startActivity(intent);
    }
    public void get_a2 (View view){
        Intent intent = new Intent(this,Input.class);
        intent.putExtra(A2_AVE,a2_ave);
        intent.putExtra(A2_PRO,a2_pro);
        startActivity(intent);
    }
    public void get_a3 (View view){
        Intent intent = new Intent(this,Input.class);
        startActivity(intent);
    }
    public void get_a4 (View view){
        Intent intent = new Intent(this,Input.class);
        startActivity(intent);
    }
    public void get_a5 (View view){
        Intent intent = new Intent(this,Input.class);
        startActivity(intent);
    }

}

コード
<TableLayout>

    <TableRow>
        <TextView
            android:text="@string/kai"></TextView>

        <EditText
            android:id="@+id/kai"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:layout_width="0dp"/>
    </TableRow>

    <TableRow>
        <TextView
            android:text="@string/tou"></TextView>
        <EditText
            android:id="@+id/tou"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:layout_width="0dp"/>
    </TableRow>
    <TableRow>
        <TextView
            android:text="@string/kan"></TextView>
        <EditText
            android:id="@+id/kan"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:layout_width="0dp"/>
    </TableRow>
    <TableRow>
        <TextView
            android:text="@string/kas"></TextView>
        <EditText
            android:id="@+id/kas"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:layout_width="0dp"/>
    </TableRow>
    <Button
        android:onClick="get_result"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/cul"/>
</TableLayout>


public class Input extends AppCompatActivity {

    public final static String EXTRA_KAI = "com.example.sample.name.KAI";
    public final static String EXTRA_TOU = "com.example.sample.name.TOU";
    public final static String EXTRA_KAN = "com.example.sample.name.KAN";
    public final static String EXTRA_KAS = "com.example.sample.name.KAS";
   /* public final static String A1_AVE = "com.example.sample.name.A1_AVE";
    public final static String A1_PRO = "com.example.sample.name.A1_PRO";
    public final static String A2_AVE = "com.example.sample.name.A2_AVE";
    public final static String A2_PRO = "com.example.sample.name.A2_PRO";*/



      /*  Intent intent1 = getIntent();
        Double a1_ave = intent1.getDoubleExtra(A.A1_AVE);
        Double a1_pro = intent1.getDoubleExtra(A.A1_PRO);
        Double a2_ave = intent1.getDoubleExtra(A.A2_AVE);
        Double a2_pro = intent1.getDoubleExtra(A.A2_PRO);*/


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_input);
    }
    public void get_result (View view){
        EditText kai = (EditText) findViewById(R.id.kai);
        String kai1 =kai.getText().toString().trim();
        EditText tou = (EditText) findViewById(R.id.tou);
        String tou1 = tou.getText().toString().trim();
        EditText kan = (EditText) findViewById(R.id.kan);
        String kan1 = kan.getText().toString().trim();
        EditText kas = (EditText) findViewById(R.id.kas);
        String kas1 = kas.getText().toString().trim();
        Intent intent = new Intent(this,Result.class);
        intent.putExtra(EXTRA_KAI, kai1);
        intent.putExtra(EXTRA_TOU, tou1);
        intent.putExtra(EXTRA_KAN, kan1);
        intent.putExtra(EXTRA_KAS, kas1);
      /*  intent.putExtra(A1_AVE,a1_pro);
        intent.putExtra(A1_PRO,a1_pro);
        intent.putExtra(A2_AVE,a2_ave);
        intent.putExtra(A2_PRO,a2_pro);*/

        startActivity(intent);
    }
}

コード
<TableLayout>

    <TableRow>
        <TextView
            android:text="@string/per1000"/>
        <TextView
            android:id="@+id/per1000"/>
        <TextView
            android:text="@string/kai"/>
    </TableRow>

    <TableRow>
        <TextView
            android:text="@string/per1"/>
        <TextView
            android:id="@+id/per1"/>
        <TextView
            android:text="@string/yen"/>
    </TableRow>

    <TableRow>
        <TextView
            android:text="@string/now"/>
        <TextView
            android:id="@+id/now"/>
        <TextView
            android:text="@string/yen"/>
    </TableRow>
</TableLayout>


public class Result extends AppCompatActivity {

Intent intent1 = getIntent();
        Double a1_ave = intent1.getDoubleExtra(A.A1_AVE);
        Double a1_pro = intent1.getDoubleExtra(A.A1_PRO);
        Double a2_ave = intent1.getDoubleExtra(A.A2_AVE);
        Double a2_pro = intent1.getDoubleExtra(A.A2_PRO);

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

        Intent intent = getIntent();
        String kai1 = intent.getStringExtra(Input.EXTRA_KAI);
        String tou1 = intent.getStringExtra(Input.EXTRA_TOU);
        String kan1 = intent.getStringExtra(Input.EXTRA_KAN);
        String kas1 = intent.getStringExtra(Input.EXTRA_KAS);

     /*   Double a1_ave = intent.getDoubleExtra(Input.A1_AVE);
        Double a1_pro = intent.getDoubleExtra(Input.A1_PRO);
        Double a2_ave = intent.getDoubleExtra(Input.A2_AVE);
        Double a2_pro = intent.getDoubleExtra(Input.A2_PRO);*/

        double kai = Double.parseDouble(kai1);
        double tou = Double.parseDouble(tou1);
        double kan = Double.parseDouble(kan1);
        double kas = Double.parseDouble(kas1);


        double kait = kai / tou * 1000;
        double kita = (Aで決めた値を入れたい ave) * kan / (Aで決めた値を入れたい pro) - tou / kai;
        double kit = kita * kai;

        String kait2 = String.valueOf(kait);
        String kita2 = String.valueOf(kita);
        String kit2 = String.valueOf(kit);

        TextView kait3 = (TextView) findViewById(R.id.per1000);
        kait3.setText(kait2);
        TextView kita3 = (TextView) findViewById(R.id.per1);
        kita3.setText(kita2);
        TextView kit3 = (TextView) findViewById(R.id.now);
        kit3.setText(kit2);
    }
}

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

checkベストアンサー

+1

そもそもIntentに入れる段階でDoubleで入れてるのに、取り出すときにgetStringExtraで取り出せるわけがありません。
Doubleで入れた場合、getSerializableExtraというメソッドがあるのでそれで取り出します。Doubleへのキャストも必要になります。

最初にDoubleではなくプリミティブのdoubleで入れて、getDoubleExtraで取得したほうが安全です。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/08/15 01:44

    Double a1_ave = intent1.getDoubleExtra(A.A1_AVE);
    Double a1_pro = intent1.getDoubleExtra(A.A1_PRO);
    Double a2_ave = intent1.getDoubleExtra(A.A2_AVE);
    Double a2_pro = intent1.getDoubleExtra(A.A2_PRO);

    (A.A1_AVE);
    (A.A1_PRO);
    (A.A2_AVE);
    (A.A2_PRO);
    の部分に
    getDoubleExtra (String, Double) in Intent cannot be applied to (String)
    と表示されます。

    キャンセル

  • 2016/08/15 01:49

    失礼、getDoubleExtraは、引数Stringに結びついた値がなかった場合のデフォルト値を引数として設定しておく必要があるんでした。適当に2つ目の引数に0などを設定するといいでしょう。

    キャンセル

  • 2016/08/15 02:40

    とりあえずエラーは消えましたが強制終了してしまうようです。
    エラーを消すことには成功したので自分でいじってみようと思います。
    ありがとうございました。

    キャンセル

+1

InputのonCreateでローカル変数に値を入れていますね。しかし、Inputのget_resultでフィールド変数から値を取得しているからnullが渡されていると推測されます。

このようなエラーの場合はログ出力をして値を確認しましょう。

また、xmlとJavaコードを一緒のマークダウンに入れるのは辞めましょう、読みにくいです。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/08/13 21:53

    変更したところnullではなくなりましたがcom.example.sample.name.A1_AVEと表示されてしまいました。

    Aで設定した
    Double a1_ave = 1218.0;
    Double a1_pro = 99.9;
    Double a2_ave = 4562.0;
    Double a2_pro = 245.5;
    これらの値をもってくるにはどこが間違っているのでしょうか?

    キャンセル

  • 2016/08/13 22:01

    回答やコメントを理解しようとしないなら何を回答しても無意味ですね。

    キャンセル

  • 2016/08/13 22:34

    ローカル変数については検索して理解することができました。

    キャンセル

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

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

関連した質問

同じタグがついた質問を見る