如何使用共享首选项维护会话

时间:2016-09-12 11:34:15

标签: android session

我正在开发一个应用程序,因为我正在使用共享首选项维护会话。我在用户登录时,我正在使用他们的电子邮件ID进一步使用。但是当我尝试在另一个活动中使用该电子邮件时,它正在显示空值。 下面是我的mainActivity代码:

    public class main extends AppCompatActivity {
public Button submit;


public static final String MyPREFERENCES = "MyPrefs" ;
public static final String email = "emailkey";
SharedPreferences sharedpreferences;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity1);

    submit = (Button) findViewById(R.id.btn_login);

    ImageView i1 = (ImageView) findViewById(R.id.imgLogo);

    String checkBoxText = "I agree to all the";
    final CheckBox checkBox = (CheckBox) findViewById(R.id.checkBox);
    sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
    checkBox.setText(Html.fromHtml(checkBoxText));
    checkBox.setMovementMethod(LinkMovementMethod.getInstance());
    submit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            EditText e1 = (EditText) findViewById(R.id.input_email);
            EditText p1 = (EditText) findViewById(R.id.input_password);
            String e = e1.getText().toString();
            final String password = p1.getText().toString();

            SharedPreferences.Editor editor = sharedpreferences.edit();

            editor.putString(email, e);

            editor.commit();

以下是我的另一项活动的代码:

           String e,email;

@Override

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.internshipsdetails);
      SharedPreferences sharedpreferences = getSharedPreferences(main.MyPREFERENCES, Context.MODE_PRIVATE);

    sharedpreferences.getString(email,e);
    String url = "url?COMP_REQ_ID=" + title + "&StuEmail=" + e;
    AQuery mAQuery = new AQuery(InternShipsDetails.this);
    mAQuery.ajax(url, String.class, new AjaxCallback<String>() {

        @Override

        public void callback(String url, String data, AjaxStatus status) {

            super.callback(url, data, status);
            if (BuildConfig.DEBUG) {
                Log.d("###$Request URL", url + "");
                Log.d("###$Response ", data + "");
                Log.d("###$Status Message : ", status.getMessage() + "");
                Log.d("###$Status Code : ", status.getCode() + "");

            }

3 个答案:

答案 0 :(得分:6)

您可以通过在执行注销操作后更改共享首选项值来管理会话,并在登录时再次检查首选项。您可以在登录和注销操作时将当前时间也保存在字符串中。确保使用私人共享偏好。

答案 1 :(得分:3)

您正在将错误的密钥传递给共享的Pref,因为您将获得null。

以下是您的更新代码,它将为您提供存储的电子邮件地址:

      SharedPreferences sharedpreferences = getSharedPreferences(main.MyPREFERENCES, Context.MODE_PRIVATE);

  e = sharedpreferences.getString(main.email,"");
    String url = "url?COMP_REQ_ID=" + title + "&StuEmail=" + e;

快乐的编码!!!

答案 2 :(得分:0)

getString (String key, String defValue)方法返回String。因此,您需要在string变量中捕获输出。 此外,您正在传递null密钥。您需要传递保存值的相同密钥。

所以,在你的情况下,它将是

e = sharedpreferences.getString("emailkey","nodata");