●やりたいこと
Android StudioにてMain.ktからResult.ktへFloat型の値を送りたい。
Mainにて、putExtra("WEIGHT", weight!!)で格納された値をResultにて同じくgetFloatExtra("WEIGHT", weight!!)で受け取ろうとしているのですが、エラーとなり何度試しても解決策がわかりません。。。
現在はエラーが出ないように、val Weight = intent.getFloatExtra("WEIGHT", 0f)としてデフォルト値0を入れているのですが、これだと0のため計算ができず、どの計算の答えも0となってしまいます。
おそらく質問の仕方がうまくなく、ご指摘頂くかもしれませんが初心者のためどのような質問がいいか未だにわかっておりません、、。
何卒よろしくお願い致します。
Kotlin(Main.kt)
1 2class MainActivity : AppCompatActivity() { 3 //lateinitはonCreate外にあるbindingを紐づけるため 4 5 //下記3つはEditText型 6 lateinit var editWeight: EditText 7 lateinit var editAge: EditText 8 lateinit var editHight: EditText 9 10 //下記2つはRadioButton型 11 lateinit var radioMan: RadioButton 12 lateinit var radioWoman: RadioButton 13 14 //下記3つはButton型 15 lateinit var infoButton: Button 16 lateinit var keisanButton: Button 17 lateinit var nextButton: Button 18 19 //上の8つの宣言はbinding.idで直指定出来るため必要のないフィールド 20 21 //男女どちらがチェックされたかを判断する変数 22 var man_is_checkd = false 23 var woman_is_checked = false 24 25 //?はnull許容型このままでは計算できない 26 var weight: Float? = 0f 27 var age: Float? = 0f 28 var hight: Float? = 0f 29 30 private lateinit var binding: ActivityMainBinding //binding 31 32 override fun onCreate(savedInstanceState: Bundle?) { 33 super.onCreate(savedInstanceState) 34 binding = ActivityMainBinding.inflate(layoutInflater)//binding 35 setContentView(binding.root)//binding 36 37 //それぞれのviewとの紐付け 38 //先にも書いたが、直指定出来るため変数にいれる必要もないがjavaの復習のため 39 editWeight = binding.weight 40 editAge = binding.age 41 editHight = binding.hight 42 43 radioMan = binding.man 44 radioWoman = binding.woman 45 46 infoButton = binding.infoBtn 47 keisanButton = binding.keisanBtn 48 nextButton = binding.nextBtn 49 50 51 //binding.ID.メソッド(文字or整数など) 52 binding.welcomDA.setText("WelcomDaietAdviser") 53 binding.textView2.setText("まずは基礎代謝を計算しましょう!") 54 55 56 //計算結果を格納するプロパティ(javaでいうフィールド) 57 var kisotaisya: Float 58 59 binding.keisanBtn.setOnClickListener { 60 61 val weight = editWeight.text.toString().toFloatOrNull() 62 val age = editAge.text.toString().toFloatOrNull() 63 val height = editHight.text.toString().toFloatOrNull() 64 if (weight == null || age == null || height == null) { 65 AlertDialog.Builder(this) 66 .setTitle(R.string.dialog_title_invalid_input) 67 .setPositiveButton(android.R.string.ok, null).show() 68 return@setOnClickListener 69 } 70 71 if (man_is_checkd) { //男が選ばれた処理 72 kisotaisya = 13.397f * weight!! + 4.799f * height!! - 5.677f * age!! + 88.362f 73 } else if (woman_is_checked) { //女が選ばれた処理 74 kisotaisya = 9.247f * weight!! + 3.098f * height!! - 4.33f * age!! + 447.593f 75 } else { //どちらも選ばれていない 76 AlertDialog.Builder(this) 77 .setTitle(R.string.dialog_title_invalid_input) 78 .setPositiveButton(android.R.string.ok, null).show() 79 return@setOnClickListener 80 } 81 binding.kisotaisya.setText(kisotaisya.toString()) 82 83 } 84 85 86//前回入力した数値を記憶しておく処理 87 binding.infoBtn.setOnClickListener { 88 89 val data: SharedPreferences = getSharedPreferences("DATA", Context.MODE_PRIVATE) 90 val editor = data.edit() 91 editor.putFloat("WEIGHT", weight!!) 92 editor.putFloat("AGE", age!!) 93 editor.putFloat("HIGHT", hight!!) 94 editor.apply() 95 96 } 97 98 99 100 binding.nextBtn.setOnClickListener { 101 startActivity(Intent(this, ResultActivity1::class.java).apply { 102 putExtra("WEIGHT", weight!!) 103 putExtra("AGE", age!!) 104 putExtra("HIGHT", hight!!) 105 //putExtra("KISOTAISYA", kiso)//if文で計算したkisotaisyaを入れて、ResultActivityで使いたいができない) 106 }) 107 108 } 109 } 110 111fun onClickRadioButton(view: View) { 112 if (view is RadioButton) { //ラジオボタンからしか呼ばれないため不要な処理 113 114 val checked: Boolean = view.isChecked //ラジオボタンがチェックされた 115 116 when (view.getId()) { 117 R.id.man -> if (checked) { //viewのidがmanで、もしcheckedならmanをtruewomanをfalse 118 man_is_checkd = true 119 woman_is_checked = false 120 } 121 R.id.woman -> if (checked) { 122 man_is_checkd = false 123 woman_is_checked = true 124 } 125 } 126 } 127 } 128} 129 130
result.kt
1class ResultActivity1 : AppCompatActivity() { 2 lateinit var binding: ActivityResult1Binding 3 override fun onCreate(savedInstanceState: Bundle?) { 4 super.onCreate(savedInstanceState) 5 binding=ActivityResult1Binding.inflate(layoutInflater) 6 setContentView(binding.root) 7 8 binding.Text1.setText("基礎代謝を計算しましょう!") 9 binding.textStrong.setText("高強度TR") 10 binding.textMidium.setText("中強度TR") 11 binding.textLow.setText("低強度TR") 12 binding.textWalking.setText("ウォーキング") 13 binding.textSit.setText("座位") 14 binding.textStand.setText("立位(立ち姿勢)") 15 binding.min1.setText("分") 16 binding.min2.setText("分") 17 binding.min3.setText("分") 18 binding.min4.setText("分") 19 binding.min5.setText("分") 20 binding.min6.setText("分") 21 binding.todayActive1.setText("今日の活動代謝は") 22 binding.totalKcal1.setText("今日の消費カロリー") 23 24binding.activeKeisanBtn.setOnClickListener { 25 val editTR1 = binding.editTR1.text.toString().toFloatOrNull() 26 val editTR2 = binding.editTR2.text.toString().toFloatOrNull() 27 val editTR3 = binding.editTR3.text.toString().toFloatOrNull() 28 val editWalk = binding.editWalk.text.toString().toFloatOrNull() 29 val editSit = binding.editSit.text.toString().toFloatOrNull() 30 val editStand = binding.editStand.text.toString().toFloatOrNull() 31 32 if(editTR1 == null || editTR2 == null || editTR3 == null || editWalk == null 33 || editSit == null || editStand == null) { 34 AlertDialog.Builder(this) 35 .setTitle(R.string.dialog_title_invalid_input) 36 .setPositiveButton(android.R.string.ok, null).show() 37 return@setOnClickListener 38 39 } 40 41 //putExtraで格納された値を変数に入れる処理 42 val Weight = intent.getFloatExtra("WEIGHT", 0f) 43 val Age = intent.getFloatExtra("AGE", 0f) 44 val Hight = intent.getFloatExtra("HIGHT", 0f) 45 val kisotaisya3 = intent.getFloatExtra("KISOTAISYA", 0f); 46 47 //活動代謝の合計とmain.java出したkisotaisyaの合計を計算 48 //val totalKcal2 = katudoTaisya + //mainActivutyのkisotaisyaを使いたい 49 //binding.totalKcal2.setText(totalKcal2) 50 51 52 //各運動別の活動代謝計算式 53 //活動代謝の出し方(例)(2.5METs-1) × 60kg × 0.5時間 × 1.05 = 78.75kcal 54 val active1 = 5f * Weight * editTR1!! * 1.05f 55 val active2 = 4f * Weight * editTR2!! * 1.05f 56 val active3 = 3.5f * Weight * editTR3!! * 1.05f 57 val activeWalk = 1.8f * Weight * editWalk!! * 1.05f 58 val activeStand = 0.8f * Weight * editStand!! * 1.05f 59 val activeSit = 0.5f * Weight * editSit!! * 1.05f 60 61 //この日の活動代謝の合計 62 val katudoTaisya = active1 + active2 + active3 + activeWalk + activeStand + activeSit 63 //結果を画面に表示 64 binding.todayActive2.setText(katudoTaisya.toString()) 65 66
回答1件
あなたの回答
tips
プレビュー