-2

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();
        }

    }
4

2 に答える 2

0

ファイルへの書き込みに関する問題への答えは、ファイルに書き込むたびに、以前にあったものを上書きすることです。変更する必要があります

FileOutputStream fos = openFileOutput("TotalSavings", Context.MODE_PRIVATE)

に:

FileOutputStream fos = openFileOutput("TotalSavings", Context.MODE_PRIVATE | Context.MODE_APPEND)

これは、ファイルを非公開にするだけでなく、ファイルに追加することを Android に伝えます。

編集 新しい問題は、テキストを他のテキストの直後に配置しているため、ファイルに新しい行を強制することです。最も簡単な方法は次のようになります。

String totalFromField = total.getText().toString() + "\n";
fos.write(totalFromField.getBytes());
于 2012-11-09T13:42:40.423 に答える
0

この行は必要ないと思います

String line = inputString.replaceAll("[^0-9.]", "");

代わりにあなたは言わなければなりません

String line = inputString;

それはあなたのために働く必要があります。

于 2012-11-07T16:31:28.773 に答える