SharedPreferences in Android app for remember me button

北城以北 提交于 2019-12-11 16:11:53

问题


Im not to sure what I'm doing wrong. In my app I'm trying to have it remember a previous password entered into the textfield on submit. From research done using shared preferences saving the variable even if the app it restarted. Top of my code:

public class AK_Voucher_access extends BT_fragment{

View thisScreensView = null;

String errormessage = "";
String errormessageTextColor = "";
String errormessageText = "";
String rememberTextText = "";
String rememberTextTextColor = "";
String voucherTextfieldPlaceholder = "";
String voucherTextfieldSecureTextEntry = "";
boolean voucherTextfieldSecureTextEntryBool = false;
String iphoneImage = "";
String ipadImage = "";
String errormessageInvalid = "";
String errormessageRemember = "";

private TextView errormessageTextView = null;
private EditText voucherTextfieldEditText = null;
private ImageView imageView = null;
private Button submitButton = null;
private Switch rememberSwitch = null;

private Drawable myHeaderImageDrawable = null;
private String alphaImage = "", pass;
private static BT_item screenObjectToLoad = null;
private static final String PASSVALUE = "value";
//private static final String appPassword = "appPassword";
Context context;

To retrieve textfield when set:

if (rememberSwitch.isChecked()) {
            BT_debugger.showIt(fragmentName + ":rememberSwitch is ON");

        SharedPreferences settings = context.getSharedPreferences(PASSVALUE, MODE_PRIVATE);

        String rpass= settings.getString("rpassword","");


            if (rpass!=null) {
                    voucherTextfieldEditText.setText(rpass);
            } else {
                voucherTextfieldEditText.setText("nono");
            }

    }
    else {
        BT_debugger.showIt(fragmentName + ":rememberSwitch is OFF");
        // switchStatus.setText("Switch is currently OFF");
    }

Then my code to save the String on submit:

if (loadScreenNickname.length() > 1 && !loadScreenNickname.equalsIgnoreCase("none")) {

                // before we launch the next screen...
                if (!rememberSwitch.isChecked()) {
                    voucherTextfieldEditText.setText("");
                }

                if (rememberSwitch.isChecked()){
                    //voucherTextfieldEditText.setText("");

                    String pass = voucherTextfieldEditText.getText().toString();
                    BT_debugger.showIt(pass + ":CODE");

                    SharedPreferences settings = context.getSharedPreferences(PASSVALUE, MODE_PRIVATE);
                    settings.edit().putString("rpassword", pass).apply();

                    rememberSwitch.setChecked(true);



                }
                errormessageTextView.setVisibility(View.GONE);
                errormessageTextView.invalidate();

                //loadScreenObject(null, thisScreen);
                try {
                    loadScreenWithNickname(loadScreenNickname);

                    foundIt = 1;

                } catch (Exception ex){
                    Log.e ("eTutorPrism Error", "Caught this exception " + ex);
                    ex.printStackTrace();
                }
                break;
            }
        }

However overtime I run the plugin within my app I receive this error in the logcat:

E/UncaughtException: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.SharedPreferences android.content.Context.getSharedPreferences(java.lang.String, int)' on a null object reference
                                                               at com.asfapp.ui.bt_plugins.AK_Voucher_access.onCreateView(AK_Voucher_access.java:210)


E/AndroidRuntime: FATAL EXCEPTION: main
                                                        Process: com.asfapp, PID: 24771
                                                        java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.SharedPreferences android.content.Context.getSharedPreferences(java.lang.String, int)' on a null object reference
                                                            at com.asfapp.ui.bt_plugins.AK_Voucher_access.onCreateView(AK_Voucher_access.java:210)

Not to sure whats wrong with the code this time but anything should help.


回答1:


use this code to get SharedPreference in fragment

SharedPreferences preferences = this.getActivity().getSharedPreferences("myPref", Context.MODE_PRIVATE);



回答2:


do you define the context?

Context context;

i didnt see the value of context here. maybe this is the reason why its return NullPointerException you should define it with activity or context. And you can also do this instead make context var: getApplicationContext().getSharedPreferences() Or getActivity().getSharedPreferences()




回答3:


try

Context context = getApplicationContext();
SharedPreferences settings = context.getSharedPreferences(PASSVALUE, context.MODE_PRIVATE);

You're getting NullPointerException because context is undefined. Either define it before calling your context.getSharedPreference() or use another way such as getApplicationContext().getSharedPreference() .



来源:https://stackoverflow.com/questions/46202780/sharedpreferences-in-android-app-for-remember-me-button

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!