質問編集履歴

2

全てのコードを載せるため、修正を加えた。

2021/03/26 09:22

投稿

yasuun
yasuun

スコア7

test CHANGED
File without changes
test CHANGED
@@ -20,6 +20,122 @@
20
20
 
21
21
  ```Kotlin(Main.kt)
22
22
 
23
+
24
+
25
+ class MainActivity : AppCompatActivity() {
26
+
27
+ //lateinitはonCreate外にあるbindingを紐づけるため
28
+
29
+
30
+
31
+ //下記3つはEditText型
32
+
33
+ lateinit var editWeight: EditText
34
+
35
+ lateinit var editAge: EditText
36
+
37
+ lateinit var editHight: EditText
38
+
39
+
40
+
41
+ //下記2つはRadioButton型
42
+
43
+ lateinit var radioMan: RadioButton
44
+
45
+ lateinit var radioWoman: RadioButton
46
+
47
+
48
+
49
+ //下記3つはButton型
50
+
51
+ lateinit var infoButton: Button
52
+
53
+ lateinit var keisanButton: Button
54
+
55
+ lateinit var nextButton: Button
56
+
57
+
58
+
59
+ //上の8つの宣言はbinding.idで直指定出来るため必要のないフィールド
60
+
61
+
62
+
63
+ //男女どちらがチェックされたかを判断する変数
64
+
65
+ var man_is_checkd = false
66
+
67
+ var woman_is_checked = false
68
+
69
+
70
+
71
+ //?はnull許容型このままでは計算できない
72
+
73
+ var weight: Float? = 0f
74
+
75
+ var age: Float? = 0f
76
+
77
+ var hight: Float? = 0f
78
+
79
+
80
+
81
+ private lateinit var binding: ActivityMainBinding //binding
82
+
83
+
84
+
85
+ override fun onCreate(savedInstanceState: Bundle?) {
86
+
87
+ super.onCreate(savedInstanceState)
88
+
89
+ binding = ActivityMainBinding.inflate(layoutInflater)//binding
90
+
91
+ setContentView(binding.root)//binding
92
+
93
+
94
+
95
+ //それぞれのviewとの紐付け
96
+
97
+ //先にも書いたが、直指定出来るため変数にいれる必要もないがjavaの復習のため
98
+
99
+ editWeight = binding.weight
100
+
101
+ editAge = binding.age
102
+
103
+ editHight = binding.hight
104
+
105
+
106
+
107
+ radioMan = binding.man
108
+
109
+ radioWoman = binding.woman
110
+
111
+
112
+
113
+ infoButton = binding.infoBtn
114
+
115
+ keisanButton = binding.keisanBtn
116
+
117
+ nextButton = binding.nextBtn
118
+
119
+
120
+
121
+
122
+
123
+ //binding.ID.メソッド(文字or整数など)
124
+
125
+ binding.welcomDA.setText("WelcomDaietAdviser")
126
+
127
+ binding.textView2.setText("まずは基礎代謝を計算しましょう!")
128
+
129
+
130
+
131
+
132
+
133
+ //計算結果を格納するプロパティ(javaでいうフィールド)
134
+
135
+ var kisotaisya: Float
136
+
137
+
138
+
23
139
  binding.keisanBtn.setOnClickListener {
24
140
 
25
141
 
@@ -74,6 +190,34 @@
74
190
 
75
191
 
76
192
 
193
+ //前回入力した数値を記憶しておく処理
194
+
195
+ binding.infoBtn.setOnClickListener {
196
+
197
+
198
+
199
+ val data: SharedPreferences = getSharedPreferences("DATA", Context.MODE_PRIVATE)
200
+
201
+ val editor = data.edit()
202
+
203
+ editor.putFloat("WEIGHT", weight!!)
204
+
205
+ editor.putFloat("AGE", age!!)
206
+
207
+ editor.putFloat("HIGHT", hight!!)
208
+
209
+ editor.apply()
210
+
211
+
212
+
213
+ }
214
+
215
+
216
+
217
+
218
+
219
+
220
+
77
221
  binding.nextBtn.setOnClickListener {
78
222
 
79
223
  startActivity(Intent(this, ResultActivity1::class.java).apply {
@@ -92,9 +236,99 @@
92
236
 
93
237
  }
94
238
 
239
+ }
240
+
241
+
242
+
243
+ fun onClickRadioButton(view: View) {
244
+
245
+ if (view is RadioButton) { //ラジオボタンからしか呼ばれないため不要な処理
246
+
247
+
248
+
249
+ val checked: Boolean = view.isChecked //ラジオボタンがチェックされた
250
+
251
+
252
+
253
+ when (view.getId()) {
254
+
255
+ R.id.man -> if (checked) { //viewのidがmanで、もしcheckedならmanをtruewomanをfalse
256
+
257
+ man_is_checkd = true
258
+
259
+ woman_is_checked = false
260
+
261
+ }
262
+
263
+ R.id.woman -> if (checked) {
264
+
265
+ man_is_checkd = false
266
+
267
+ woman_is_checked = true
268
+
269
+ }
270
+
271
+ }
272
+
273
+ }
274
+
275
+ }
276
+
277
+ }
278
+
279
+
280
+
281
+
282
+
95
283
  ```
96
284
 
97
- ```(Result.kt)
285
+ ```result.kt
286
+
287
+ class ResultActivity1 : AppCompatActivity() {
288
+
289
+ lateinit var binding: ActivityResult1Binding
290
+
291
+ override fun onCreate(savedInstanceState: Bundle?) {
292
+
293
+ super.onCreate(savedInstanceState)
294
+
295
+ binding=ActivityResult1Binding.inflate(layoutInflater)
296
+
297
+ setContentView(binding.root)
298
+
299
+
300
+
301
+ binding.Text1.setText("基礎代謝を計算しましょう!")
302
+
303
+ binding.textStrong.setText("高強度TR")
304
+
305
+ binding.textMidium.setText("中強度TR")
306
+
307
+ binding.textLow.setText("低強度TR")
308
+
309
+ binding.textWalking.setText("ウォーキング")
310
+
311
+ binding.textSit.setText("座位")
312
+
313
+ binding.textStand.setText("立位(立ち姿勢)")
314
+
315
+ binding.min1.setText("分")
316
+
317
+ binding.min2.setText("分")
318
+
319
+ binding.min3.setText("分")
320
+
321
+ binding.min4.setText("分")
322
+
323
+ binding.min5.setText("分")
324
+
325
+ binding.min6.setText("分")
326
+
327
+ binding.todayActive1.setText("今日の活動代謝は")
328
+
329
+ binding.totalKcal1.setText("今日の消費カロリー")
330
+
331
+
98
332
 
99
333
  binding.activeKeisanBtn.setOnClickListener {
100
334
 
@@ -142,6 +376,16 @@
142
376
 
143
377
 
144
378
 
379
+ //活動代謝の合計とmain.java出したkisotaisyaの合計を計算
380
+
381
+ //val totalKcal2 = katudoTaisya + //mainActivutyのkisotaisyaを使いたい
382
+
383
+ //binding.totalKcal2.setText(totalKcal2)
384
+
385
+
386
+
387
+
388
+
145
389
  //各運動別の活動代謝計算式
146
390
 
147
391
  //活動代謝の出し方(例)(2.5METs-1) × 60kg × 0.5時間 × 1.05 = 78.75kcal
@@ -168,4 +412,8 @@
168
412
 
169
413
  binding.todayActive2.setText(katudoTaisya.toString())
170
414
 
415
+
416
+
417
+
418
+
171
419
  ```

1

文章をわかりやすく変えた

2021/03/26 09:22

投稿

yasuun
yasuun

スコア7

test CHANGED
File without changes
test CHANGED
@@ -1,84 +1,128 @@
1
- やりたいこと
1
+ やりたいこと
2
2
 
3
- 上のmain.javaから下のresult.javaへ情報を送りたい。
3
+ Android StudioにてMain.ktからResult.ktへFloat型の値を送りたい。
4
4
 
5
- 送りたい情報はkeisanBtn.setOnClickListener内のif文の結果kisotaisyaです。
5
+ MainにてputExtra("WEIGHT", weight!!)で格納された値をResultにて同じくgetFloatExtra("WEIGHT", weight!!)受け取ろうとしていですが、エラーとなり何度試しても解決策がわかりません。。
6
6
 
7
- このまま、putExtraに入れてもエラーが出てしまい、if文の前にkiso変数を用意して戻りにしようも無理で
7
+ 現在はエラーが出ようにval Weight = intent.getFloatExtra("WEIGHT", 0f)としてデフォルト0を入れているのですが、これだ0のため計算ができず、どの計算の答えも0となってしまいます
8
-
9
- 調べた所、メソッド内の変数の有効範囲外なのかな、、と思っております。
10
8
 
11
9
 
12
10
 
13
- main.javaらputExtra("KISOTAISYA", kisotaisya)//if文で計算したkisotaisyaを入れて、ResultActivityで使いたい)
11
+ おそらく質問の仕方がうまくなく、ご指摘頂くれませんが初心者のめどのような質問がいいか未だにわかっおりません、。
14
12
 
15
- result.javaにintent.getFloatExtra("KISOTAISYA", 0f);
16
-
17
-
18
-
19
- を完成させるには何が足りないでしょうか?
20
-
21
- また、初心者なので解説もいただけたら嬉しいです、、。
22
-
23
- よろしくお願い致します。
13
+ 何卒よろしくお願い致します。
24
14
 
25
15
 
26
16
 
27
17
 
28
18
 
29
- ```Kotlin
30
19
 
20
+
21
+ ```Kotlin(Main.kt)
22
+
31
- binding.keisanBtn.setOnClickListener {
23
+ binding.keisanBtn.setOnClickListener {
32
24
 
33
25
 
34
26
 
35
- val weight = editWeight.text.toString().toFloatOrNull()
27
+ val weight = editWeight.text.toString().toFloatOrNull()
36
28
 
37
- val age = editAge.text.toString().toFloatOrNull()
29
+ val age = editAge.text.toString().toFloatOrNull()
38
30
 
39
- val height = editHight.text.toString().toFloatOrNull()
31
+ val height = editHight.text.toString().toFloatOrNull()
40
32
 
41
- if (weight == null || age == null || height == null) {
33
+ if (weight == null || age == null || height == null) {
42
34
 
43
- AlertDialog.Builder(this)
35
+ AlertDialog.Builder(this)
44
36
 
45
- .setTitle(R.string.dialog_title_invalid_input)
37
+ .setTitle(R.string.dialog_title_invalid_input)
46
38
 
47
- .setPositiveButton(android.R.string.ok, null).show()
39
+ .setPositiveButton(android.R.string.ok, null).show()
48
40
 
49
- return@setOnClickListener
41
+ return@setOnClickListener
50
42
 
51
- }
43
+ }
44
+
45
+
46
+
47
+ if (man_is_checkd) { //男が選ばれた処理
48
+
49
+ kisotaisya = 13.397f * weight!! + 4.799f * height!! - 5.677f * age!! + 88.362f
50
+
51
+ } else if (woman_is_checked) { //女が選ばれた処理
52
+
53
+ kisotaisya = 9.247f * weight!! + 3.098f * height!! - 4.33f * age!! + 447.593f
54
+
55
+ } else { //どちらも選ばれていない
56
+
57
+ AlertDialog.Builder(this)
58
+
59
+ .setTitle(R.string.dialog_title_invalid_input)
60
+
61
+ .setPositiveButton(android.R.string.ok, null).show()
62
+
63
+ return@setOnClickListener
64
+
65
+ }
66
+
67
+ binding.kisotaisya.setText(kisotaisya.toString())
68
+
69
+
70
+
71
+ }
52
72
 
53
73
 
54
74
 
55
75
 
56
76
 
77
+ binding.nextBtn.setOnClickListener {
78
+
79
+ startActivity(Intent(this, ResultActivity1::class.java).apply {
80
+
81
+ putExtra("WEIGHT", weight!!)
82
+
83
+ putExtra("AGE", age!!)
84
+
85
+ putExtra("HIGHT", hight!!)
86
+
57
- //var kisotaisya: Float //条件分岐の結果の変数としてフィールドを用意s
87
+ //putExtra("KISOTAISYA", kiso)//if文で計算したkisotaisyaを入れて、ResultActivityで使いたいができない)
88
+
89
+ })
58
90
 
59
91
 
60
92
 
61
- val kiso = if (man_is_checkd) { //男が選ばれた処理
93
+ }
62
94
 
63
- kisotaisya = 13.397f * weight!! + 4.799f * height!! - 5.677f * age!! + 88.362f
95
+ ```
64
96
 
65
- } else if (woman_is_checked) { //女が選ばれた処理
97
+ ```(Result.kt)
66
98
 
67
- kisotaisya = 9.247f * weight!! + 3.098f * height!! - 4.33f * age!! + 447.593f
99
+ binding.activeKeisanBtn.setOnClickListener {
68
100
 
69
- } else { //どちらも選ばれていない
101
+ val editTR1 = binding.editTR1.text.toString().toFloatOrNull()
70
102
 
71
- AlertDialog.Builder(this)
103
+ val editTR2 = binding.editTR2.text.toString().toFloatOrNull()
72
104
 
73
- .setTitle(R.string.dialog_title_invalid_input)
105
+ val editTR3 = binding.editTR3.text.toString().toFloatOrNull()
74
106
 
75
- .setPositiveButton(android.R.string.ok, null).show()
107
+ val editWalk = binding.editWalk.text.toString().toFloatOrNull()
76
108
 
77
- return@setOnClickListener
109
+ val editSit = binding.editSit.text.toString().toFloatOrNull()
78
110
 
79
- }
111
+ val editStand = binding.editStand.text.toString().toFloatOrNull()
80
112
 
113
+
114
+
115
+ if(editTR1 == null || editTR2 == null || editTR3 == null || editWalk == null
116
+
117
+ || editSit == null || editStand == null) {
118
+
119
+ AlertDialog.Builder(this)
120
+
81
- binding.kisotaisya.setText(kisotaisya.toString())
121
+ .setTitle(R.string.dialog_title_invalid_input)
122
+
123
+ .setPositiveButton(android.R.string.ok, null).show()
124
+
125
+ return@setOnClickListener
82
126
 
83
127
 
84
128
 
@@ -86,29 +130,7 @@
86
130
 
87
131
 
88
132
 
89
- binding.nextBtn.setOnClickListener {
133
+ //putExtraで格納された値を変数に入れる処理
90
-
91
- startActivity(Intent(this, ResultActivity1::class.java).apply {
92
-
93
- putExtra("WEIGHT", weight!!) //!!はnullじゃなくてFloatだよということ
94
-
95
- putExtra("AGE", age!!)
96
-
97
- putExtra("HIGHT", hight!!)
98
-
99
- putExtra("KISOTAISYA", kisotaisya)//if文で計算したkisotaisyaを入れて、ResultActivityで使いたい)
100
-
101
- })
102
-
103
-
104
-
105
- }
106
-
107
-
108
-
109
- ```
110
-
111
- ```Kotlin
112
134
 
113
135
  val Weight = intent.getFloatExtra("WEIGHT", 0f)
114
136
 
@@ -116,7 +138,7 @@
116
138
 
117
139
  val Hight = intent.getFloatExtra("HIGHT", 0f)
118
140
 
119
- val kisotaisya3 = intent.getFloatExtra("KISOTAISYA", 0f)
141
+ val kisotaisya3 = intent.getFloatExtra("KISOTAISYA", 0f);
120
142
 
121
143
 
122
144
 
@@ -124,17 +146,17 @@
124
146
 
125
147
  //活動代謝の出し方(例)(2.5METs-1) × 60kg × 0.5時間 × 1.05 = 78.75kcal
126
148
 
127
- val active1 = 5f * Weight * editTR1 * 1.05f
149
+ val active1 = 5f * Weight * editTR1!! * 1.05f
128
150
 
129
- val active2 = 4f * Weight * editTR2 * 1.05f
151
+ val active2 = 4f * Weight * editTR2!! * 1.05f
130
152
 
131
- val active3 = 3.5f * Weight * editTR3 * 1.05f
153
+ val active3 = 3.5f * Weight * editTR3!! * 1.05f
132
154
 
133
- val activeWalk = 1.8f * Weight * editWalk * 1.05f
155
+ val activeWalk = 1.8f * Weight * editWalk!! * 1.05f
134
156
 
135
- val activeStand = 0.8f * Weight * editStand * 1.05f
157
+ val activeStand = 0.8f * Weight * editStand!! * 1.05f
136
158
 
137
- val activeSit = 0.5f * Weight * editSit * 1.05f
159
+ val activeSit = 0.5f * Weight * editSit!! * 1.05f
138
160
 
139
161
 
140
162
 
@@ -144,14 +166,6 @@
144
166
 
145
167
  //結果を画面に表示
146
168
 
147
- binding.todayActive2.setText(katudoTaisya.toString()) //katudoTaisyaはFloat型だから、セットするにはString型にする
148
-
149
-
150
-
151
- //活動代謝の合計とmain.java出したkisotaisyaの合計を計算
152
-
153
- val totalKcal2 = katudoTaisya + //mainActivutyのkisotaisyaを使いたい
154
-
155
- binding.totalKcal2.setText(totalKcal2)
169
+ binding.todayActive2.setText(katudoTaisya.toString())
156
170
 
157
171
  ```