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

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

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

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

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

Q&A

解決済

2回答

1827閲覧

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

syosinsya12

総合スコア69

Java

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

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

0グッド

0クリップ

投稿2016/08/13 09:11

編集2016/08/13 16:31

まだデータ入力の途中ではあるのですが、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); } } コード

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

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

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

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

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

guest

回答2

0

ベストアンサー

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

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

投稿2016/08/13 13:05

swordone

総合スコア20651

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

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

syosinsya12

2016/08/13 15:07

Double a1_ave = 1218.0; Double a1_pro = 99.9; Double a2_ave = 4562.0; Double a2_pro = 245.5; これを double a1_ave = 1218.0; double a1_pro = 99.9; double a2_ave = 4562.0; double a2_pro = 245.5; に変更し、Input,ResultのgetStringExtraをgetDoubleExtraに変更すればよいということでしょうか? そのほかに修正するところはありますか?
syosinsya12

2016/08/13 15:17

質問文を訂正してみました。見ていただけると助かります。
swordone

2016/08/13 15:22

その変更まではいいですが、現状getDoubleExtraで取得した値が変数に格納されることなく消えます。
syosinsya12

2016/08/13 15:38

消えないためにはどこを訂正すればよいでしょうか?
swordone

2016/08/13 15:54

値を保持する変数を用意する必要があります。ただし、onCreateの中にローカル変数として作ってしまうと他のメソッドでその値が使えなくなります。他のメソッドで使うのならフィールド変数を用意してその変数に格納するか、そもそもgetDoubleExtraするタイミングを考えるべきでしょう。
syosinsya12

2016/08/13 16:18

getDoubleExtraはどのタイミングでするのがよいでしょうか?
swordone

2016/08/13 16:19

そのIntentに入っている値を使いたいタイミングです。
syosinsya12

2016/08/13 16:27

Inputでは無視してResultでgetDoubleExtraを使ってもよいということですか?
syosinsya12

2016/08/13 16:33

訂正してみたのですがいかがですか?消してもよいのか?というところはコメントにしてあります。それと今の状態だとgetDoubleExtraの引数のところにエラーが出てしまいます。どのようにすれば解決できますか?
swordone

2016/08/13 16:43

このまま対症療法で答えていってもキリがありません。そもそも自分が何をしようとしているのか、そのためにどういった情報を受け渡しすればいいのか、そのあたりをきちんと整理しなおしてから考えて下さい。 あと基本を理解しないまま制作しているように見受けられます。画面遷移の話でも、サンプルコードを自分で書いてみてどういう動きをするのかやってみてから自分のアプリを制作してみてはいかがでしょうか。
syosinsya12

2016/08/13 16:47

わかりました。getDoubleExtraの引数の部分のエラーだけでも教えていただけると助かります。
swordone

2016/08/13 16:49

今まで引数に設定していた変数をコメントアウトしたから当然です。
syosinsya12

2016/08/14 14:38

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というキーは残っていると思うのですが、、、
swordone

2016/08/14 16:10

どんなエラーが出ているかを出してくれないと話ができません。
syosinsya12

2016/08/14 16: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) と表示されます。
swordone

2016/08/14 16:49

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

2016/08/14 17:40

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

0

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

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

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

投稿2016/08/13 11:06

yona

総合スコア18155

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

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

syosinsya12

2016/08/13 11:59

具体的にはどこを変更すれば正しくなるのでしょうか?
yona

2016/08/13 12:02

具体的に書いてるんですけどね。 InputのonCreateでローカル変数に代入しているのをフィールド変数に代入すればいいですよ。
syosinsya12

2016/08/13 12:15

無知ですみませんが、フィールド変数に変更するにはどこを何に変更すればよいのでしょうか?
yona

2016/08/13 12:26

InputのonCreateでStringを消す
syosinsya12

2016/08/13 12:34

Intent intent1 = getIntent(); String a1_ave = intent1.getStringExtra(A.A1_AVE); String a1_pro = intent1.getStringExtra(A.A1_PRO); String a2_ave = intent1.getStringExtra(A.A2_AVE); String a2_pro = intent1.getStringExtra(A.A2_PRO);   これを Intent intent1 = getIntent(); a1_ave = intent1.getStringExtra(A.A1_AVE); a1_pro = intent1.getStringExtra(A.A1_PRO); a2_ave = intent1.getStringExtra(A.A2_AVE); a2_pro = intent1.getStringExtra(A.A2_PRO); こうするということですか? それだとエラーが出てしまいますが。。。
yona

2016/08/13 12:36

それだとInputのget_resultでもエラーが出ているはずですよね? フィールド変数の意味を知っていますか?
syosinsya12

2016/08/13 12:40

Intent intent1 = getIntent(); intent1.getStringExtra(A.A1_AVE); intent1.getStringExtra(A.A1_PRO); intent1.getStringExtra(A.A2_AVE); intent1.getStringExtra(A.A2_PRO); これでget_resultの方もa1_aveなどをA1_AVEに変更するということでしょうか? フィールド変数についてよくわかっていないです
yona

2016/08/13 12:42

Javaの基礎からやりましょう。 基礎ができないのに応用はできません。 フィールド変数とローカル変数の違いを調べて、スコープの違いも調べてから再度回答をみてください。
syosinsya12

2016/08/13 12: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; これらの値をもってくるにはどこが間違っているのでしょうか?
yona

2016/08/13 13:01

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

2016/08/13 13:34

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問