TextView 内のファイルからすべての価格 (例: £18.99 £50 など) の合計を表示したいのですが、現在はファイルから最後の価格を読み取る/表示するだけです。
これは、ファイルに書き込むための現在のコードです。
total.setText(total.getText());
try {
FileOutputStream fos = openFileOutput("TotalSavings", Context.MODE_PRIVATE);
fos.write(total.getText().toString().getBytes());
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
これは、ファイルから読み取るための現在のコードです (メンバー burmat がいくつかの変更を提案しました)。
public void savingstotalbutton(View view) {
double total = 0;
try {
BufferedReader inputReader = new BufferedReader(new InputStreamReader(
openFileInput("TotalSavings")));
String inputString;
@SuppressWarnings("unused")
StringBuffer stringBuffer = new StringBuffer();
while ((inputString = inputReader.readLine()) != null) {
if (inputString.length() > 0) {
String line = inputString.replaceAll("[^0-9.]", "");
total = total + Double.parseDouble(line);
}
}
savingstotaltext.setText(String.valueOf(total));
} catch (IOException e) {
e.printStackTrace();
}
}
どんな助けでも大歓迎です。
編集: TotalSavings.txt の内容を手動で変更し、さまざまな価格を追加して、それをアプリの /files フォルダーにコピーしました。すべての価格を読み取り、機能する合計を提供しますが、問題は、書き込み関数が最初の行を上書きし、次の行に移動しないことです。
編集 2:計算ボタンを使用して計算を表示し、結果をファイル TotalSavings.txt に書き込むコード全体
public void calc(View view) {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
if (price.getText().toString().equals(""))
return;
if (disc.getText().toString().equals(""))
return;
double priceVal = Double.parseDouble(price.getText().toString());
double discVal = Double.parseDouble(disc.getText().toString());
double discount = priceVal / 100.0 * discVal;
int di = (int) (discount * 100);
double totalVal = priceVal - (di / 100.0);
NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.getDefault());
savings.setText(nf.format(discount));
total.setText(nf.format(totalVal));
savings.setText(savings.getText());
try {
FileOutputStream fos = openFileOutput("TotalSavings", Context.MODE_PRIVATE);
fos.write(savings.getText().toString().getBytes());
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}