androidアプリをjavaで作っていて原因不明な点が発生しました。以下は副画面SupplyActivityのコードです。この中の後半以降、新レコード追加命令の次にあるif else条件節にさしかかると何らかのエラーのせいか画面が落ちるのです。そしてMainActivityの画面が現れます。if else条件が同じ変数に対するものでないからかと調べましたがそのような記述は見当たりませんでした。どうかご教示下さい。
java
1 2 3 //ー1錠ボタンクリック時処理 画面上の在庫数1減算 4 public void onButtonMinus1Click(View view){ 5 TextView tvStock = findViewById(R.id.tvStock); 6 if( Integer.parseInt( tvStock.getText().toString() ) > 0 ) { 7 tvStock.setText( String.valueOf( Integer.parseInt( tvStock.getText().toString() ) - 1 ) ); 8 } 9 } 10 11 //+1錠ボタンクリック時処理 画面上の在庫数1加算 12 public void onButtonPlus1Click(View view){ 13 TextView tvStock = findViewById(R.id.tvStock); 14 tvStock.setText( String.valueOf( Integer.parseInt( tvStock.getText().toString() ) + 1 ) ); 15 } 16 17 18 //実行ボタンクリック時処理 データベースレコード 追加・更新・削除 19 public void onButtonClick(View view) { 20 21 //画面View取得 22 RadioGroup radioGroup = findViewById(R.id.RadioGroup); 23 EditText edName = findViewById(R.id.edName); 24 EditText edUnit = findViewById(R.id.edUnit); 25 EditText edTimes = findViewById(R.id.edTimes); 26 EditText edDays = findViewById(R.id.edDays); 27 TextView tvStock = findViewById(R.id.tvStock); 28 CheckBox checkbox_mon = findViewById(R.id.checkbox_mon); 29 CheckBox checkbox_tue = findViewById(R.id.checkbox_tue); 30 CheckBox checkbox_wed = findViewById(R.id.checkbox_wed); 31 CheckBox checkbox_thu = findViewById(R.id.checkbox_thu); 32 CheckBox checkbox_fri = findViewById(R.id.checkbox_fri); 33 CheckBox checkbox_sat = findViewById(R.id.checkbox_sat); 34 CheckBox checkbox_sun = findViewById(R.id.checkbox_sun); 35 int checkedId = radioGroup.getCheckedRadioButtonId(); 36 37 //入力チェック後 DBレコード更新(過程:1.レコード削除 2.新レコード追加) 38 if ((edName.getText().toString().trim().length() > 0 ) && 39 (edUnit.getText().toString().trim().matches("[0-9]{1,3}")) && 40 (edTimes.getText().toString().trim().matches("[0-9]{1,3}")) && 41 (edDays.getText().toString().trim().matches("[0-9]{1,3}")) && 42 (checkedId != -1) 43 ) { 44 45 //0.処理型弁別 46 String rbtn = ""; 47 switch (checkedId) { 48 case R.id.RadioButton1: 49 rbtn = "1";/*補給処理*/ 50 break; 51 case R.id.RadioButton2: 52 rbtn = "2";/*事項変更処理*/ 53 break; 54 case R.id.RadioButton3: 55 rbtn = "3";/*この薬品をデータベースから削除する処理*/ 56 break; 57 default: 58 break; 59 } 60 61 //1.レコード削除 62 _helper = new DatabaseHelper(SupplyActivity.this); 63 SQLiteDatabase db = _helper.getWritableDatabase(); 64 String sqlDelete = "DELETE FROM medication2 WHERE _id = ?"; 65 SQLiteStatement stmt = db.compileStatement(sqlDelete); 66 stmt.bindLong(1, drugId); 67 stmt.executeUpdateDelete(); 68 69 //2.新レコード追加 70 if (("1".equals(rbtn) && !(drugId != -1 && oldStock != Integer.parseInt(tvStock.getText().toString()))) || 71 ("2".equals(rbtn) && !(drugId == -1)) 72 ) { 73 String sqlInsert; 74 if (drugId == -1) { 75 sqlInsert = "INSERT INTO medication2 (taker,name,unit,times,dayOfWeek,days,stock,updateTime) VALUES(?,?,?,?,?,?,?,?)"; 76 } else { 77 sqlInsert = "INSERT INTO medication2 (_id,taker,name,unit,times,dayOfWeek,days,stock,updateTime) VALUES(?,?,?,?,?,?,?,?,?)"; 78 } 79 stmt = db.compileStatement(sqlInsert); 80 81 int k = 0;/*id*/ 82 if (drugId == -1) { 83 84 } else { 85 k = 1; 86 stmt.bindLong(k, drugId); 87 } 88 89 k = k + 1;/*服用者*/ 90 stmt.bindString(k, taker); 91 92 k = k + 1;/*薬品名*/ 93 String name = edName.getText().toString(); 94 stmt.bindString(k, name); 95 96 k = k + 1;/*一回何錠*/ 97 int unit = Integer.parseInt(edUnit.getText().toString()); 98 stmt.bindLong(k, unit); 99 100 k = k + 1;/*一日何回*/ 101 int times = Integer.parseInt(edTimes.getText().toString()); 102 stmt.bindLong(k, times); 103 104 k = k + 1;/*服用曜日*/ 105 StringBuilder sb2 = new StringBuilder(); 106 if (checkbox_mon.isChecked()) { 107 sb2.append("1"); 108 } 109 if (checkbox_tue.isChecked()) { 110 sb2.append("2"); 111 } 112 if (checkbox_wed.isChecked()) { 113 sb2.append("3"); 114 } 115 if (checkbox_thu.isChecked()) { 116 sb2.append("4"); 117 } 118 if (checkbox_fri.isChecked()) { 119 sb2.append("5"); 120 } 121 if (checkbox_sat.isChecked()) { 122 sb2.append("6"); 123 } 124 if (checkbox_sun.isChecked()) { 125 sb2.append("7"); 126 } 127 String dayOfWeek2 = sb2.toString(); 128 if (!(dayOfWeek2.length() == 0)) { 129 sb2.append(" "); 130 dayOfWeek2 = sb2.toString(); 131 } 132 stmt.bindString(k, dayOfWeek2); 133 134 k = k + 1;/*何日分*/ 135 int days = Integer.parseInt(edDays.getText().toString()); 136 stmt.bindLong(k, days); 137 138 k = k + 1;/*在庫数*/ 139 int stock = Integer.parseInt(tvStock.getText().toString()); 140 if("1".equals(rbtn)){stock = stock + unit * times * days;} 141 stmt.bindLong(k, stock); 142 143 k = k + 1;/*更新時刻(ミリ秒記載)*/ 144 Date now = new Date(); 145 long nowTime = now.getTime(); 146 stmt.bindLong(k, nowTime); 147 148 stmt.executeInsert();/* 新レコード追加命令 */ 149 150 String show = ""; 151 if (drugId == -1) { 152 show = name + "を追加しました。"; 153 } 154 else if("1".equals(rbtn)){ 155 show = name + "を補給しました。"; 156 } 157 else if (oldStock == stock){ 158 show = name + "について修正しました。"; 159 } 160 else if (oldStock > stock){ 161 show = name + "を服用しました。"; 162 } 163 else { 164 show = name + "を追加しました。"; 165 } 166 167 Toast.makeText(SupplyActivity.this, show, Toast.LENGTH_LONG).show(); 168 169 } 170 else { 171 String show = ""; 172 if("3".equals(rbtn)){ 173 show = edName.getText().toString() + "を削除しました。"; 174 } 175 else if("1".equals(rbtn) && (drugId != -1 && oldStock != Integer.parseInt(tvStock.getText().toString()))){ 176 show = "修正を選んで実行を押してください。"; 177 } 178 else if("2".equals(rbtn) && drugId == -1){ 179 show = "補給を選んで実行を押してください。"; 180 } 181 182 Toast.makeText(SupplyActivity.this, show, Toast.LENGTH_LONG).show(); 183 184 } 185 } 186 else { 187 String show; 188 if (checkedId == -1){ show = "補給? 変更? このくすりを削除?";} 189 else if (edName.getText().toString().trim().length() == 0) { 190 show = "くすり・治療のなまえをいれてください。"; 191 } else { 192 show = "数字をいれてください。"; 193 } 194 Toast.makeText(SupplyActivity.this, show, Toast.LENGTH_LONG).show(); 195 196 197 198 } 199 } 200 201 202
回答2件
あなたの回答
tips
プレビュー