简体   繁体   中英

SharedPreferences doing math with doubles don't work and there is no putDouble

So I want to + two Doubles but it gives some really weird results. Here can you see how it looks Here think it has something to do with plus strings and SharedPreferences not having putDouble. I have tried the last 2 hours to fix it but I cant get it to work can someone help me. Here is the code:

package me.danilkp1234.laerkeholtmilk;

import android.content.Context;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.KeyEvent;
import android.view.inputmethod.EditorInfo;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;

import com.google.firebase.crash.FirebaseCrash;

import static me.danilkp1234.laerkeholtmilk.R.id.brix;
import static me.danilkp1234.laerkeholtmilk.R.id.textView;
import static me.danilkp1234.laerkeholtmilk.R.id.textView3;

public class MainActivity extends AppCompatActivity {

private EditText milkdone;
private EditText brixdone;
private double milkdone2;
private double brixdone2;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    milkdone = (EditText) findViewById(R.id.milkliter);
    brixdone = (EditText) findViewById(R.id.brix);
    SharedPreferences prefs = getSharedPreferences("SavedTotals",Context.MODE_PRIVATE);
    String MilkDone2Saved=(prefs.getString("MilkDone2Saved",String.valueOf(milkdone)));
    if(!TextUtils.isEmpty(MilkDone2Saved)){
        milkdone2 = Double.parseDouble(MilkDone2Saved);
    }
    String BrixDone2Saved=(prefs.getString("BrixDone2Saved",String.valueOf(milkdone)));
    if(!TextUtils.isEmpty(BrixDone2Saved)){
        brixdone2 = Double.parseDouble(BrixDone2Saved);
    }
    brixdone.setText(String.valueOf(brixdone2));
    milkdone.setText(String.valueOf(milkdone2));
    milkdone.setOnEditorActionListener(new OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            boolean handled = false;
            if (actionId == EditorInfo.IME_ACTION_DONE) {
                SharedPreferences prefs = getSharedPreferences("SavedTotals",Context.MODE_PRIVATE);
                String MilkDone2Saved=(prefs.getString("MilkDone2Saved",String.valueOf(milkdone)));
                if(!TextUtils.isEmpty(MilkDone2Saved)){
                    milkdone2 = Double.parseDouble(MilkDone2Saved);
                }
                String BrixDone2Saved=(prefs.getString("BrixDone2Saved",String.valueOf(milkdone)));
                if(!TextUtils.isEmpty(BrixDone2Saved)){
                    brixdone2 = Double.parseDouble(BrixDone2Saved);
                }
                double test2 = brixdone2 + milkdone2;
                TextView change = (TextView) findViewById(R.id.textView3);
                change.setText(String.valueOf(test2));
                handled = true;
            }
            return handled;
        }

    });
    brixdone.setOnEditorActionListener(new OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            boolean handled = false;
            if (actionId == EditorInfo.IME_ACTION_DONE){
                SharedPreferences prefs = getSharedPreferences("SavedTotals",Context.MODE_PRIVATE);
                String MilkDone2Saved=(prefs.getString("MilkDone2Saved",String.valueOf(milkdone)));
                if(!TextUtils.isEmpty(MilkDone2Saved)){
                    milkdone2 = Double.parseDouble(MilkDone2Saved);
                }
                String BrixDone2Saved=(prefs.getString("BrixDone2Saved",String.valueOf(milkdone)));
                if(!TextUtils.isEmpty(BrixDone2Saved)){
                    brixdone2 = Double.parseDouble(BrixDone2Saved);
                }
                double test2 = brixdone2 + milkdone2;
                TextView change = (TextView) findViewById(R.id.textView3);
                change.setText(String.valueOf(test2));
                handled = true;
            }
            return handled;
        }
    });
    };
    public void onStop() {
        super.onStop();
        storeDouble("MilkDone2Saved",milkdone);
        storeDouble("BrixDone2Saved",brixdone);

    }
    public void storeDouble(String d, EditText c){
        SharedPreferences prefs = getSharedPreferences("SavedTotals",Context.MODE_PRIVATE);

        SharedPreferences.Editor editor = prefs.edit();

        editor.putString(d,String.valueOf(c.getText().toString()));
        editor.apply();
}
public void GetDouble(){
    SharedPreferences prefs = getSharedPreferences("SavedTotals",Context.MODE_PRIVATE);

}

}

It converting from double to string to double (I think). its supposed do brixdone2 + milkdone2 and its not the right result EDIT: changed it and now the app crashes with

Caused by java.lang.ClassCastException
java.lang.String cannot be cast to java.lang.Long
android.app.SharedPreferencesImpl.getLong (SharedPreferencesImpl.java:279)
me.danilkp1234.laerkeholtmilk.MainActivity.getDouble (MainActivity.java:31)
me.danilkp1234.laerkeholtmilk.MainActivity.onCreate (MainActivity.java:40)
android.app.Activity.performCreate (Activity.java:7174)

Here is the Updated Code that Crashes

I'm not sure but problem can be here

String MilkDone2Saved=(prefs.getString("MilkDone2Saved",String.valueOf(milkdone)));

getString return either string associated with MikeDone2Saved key and if key not found then default value which is

String.valueOf(milkdone)

but i thing there will be garbage value to String.valueOf(milkdone) in onCreate() so check this once again...

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM