共享首选项不检索值

时间:2017-11-24 08:53:42

标签: java android

我有两个活动,即注册和登录,我在注册课程中定义了共享首选项。在“注册”页面上,如果单击“注册活动”中的“登录活动”按钮。我正在存储共享首选项值,以便在第二次启动应用程序时,让应用程序立即转到LoginActivity而不是打开第一个活动,即注册活动。这是我的SharedPreferences类,名为Session。

private SharedPreferences prefs;

    public Session(Context cntx) {
        // TODO Auto-generated constructor stub
        prefs = PreferenceManager.getDefaultSharedPreferences(cntx);
    }

    public void setusename(String usename) {
        SharedPreferences.Editor editor = prefs.edit();
        editor.putString("username", usename).commit();
        editor.commit();

public Boolean contKey(String key){
        if (prefs.contains(key)){
            return true;
        }else{
           return false;
        }
    }

这是RegstrationActivity中的按钮,它在转到LoginActivity之前存储SharedPreferences值,以便在第二次启动时打开LoginActivity类

loginLink.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                session = new Session(getApplicationContext());
                session.setusename("hello123");

                Intent intent = new Intent(getApplication(),ActivityLogin.class);
                startActivity(intent);
                finish();
            }
        });

我已经在RegistrationActivity类的onCreate方法中定义了这个,以便在下次启动应用时切换到ActivityLogin屏幕

System.out.println("it got here...2");
        try {
            if (session.contKey("username")) {
                System.out.println("it got here...");
                Intent intent = new Intent(getApplication(), ActivityLogin.class);
                startActivity(intent);
                overridePendingTransition(R.anim.enter, R.anim.exit);
                finish();
            } else {
                System.out.println("it got here...3");
                Intent intent = new Intent(getApplication(), ActivityRegistration.class);
                startActivity(intent);
                finish();
                overridePendingTransition(R.anim.enter, R.anim.exit);
            }
        }catch(Exception ex){

        }

为什么我的共享首选项在第二次启动时没有切换到LoginActivity。请帮助

2 个答案:

答案 0 :(得分:1)

试试这个

private SharedPreferences prefs;

    public Session(Context cntx) {
        // TODO Auto-generated constructor stub
        prefs = PreferenceManager.getDefaultSharedPreferences(cntx);
    }

    public void setusename(String usename) {
        SharedPreferences.Editor editor = prefs.edit();
        editor.putString("username", usename);
        editor.commit();

        }

   }

    public String getusename() {
       return prefs.getString("username","");    
     }
  }

比使用这种方式获取值 SharedPreferences

session = new Session(getApplicationContext());
session.setusename("hello123");
String username=session.getusename();

示例代码

try {
            if (!session.getusename().equals("")) {
                System.out.println("it got here...");
                Intent intent = new Intent(getApplication(), ActivityLogin.class);
                startActivity(intent);
                overridePendingTransition(R.anim.enter, R.anim.exit);
                finish();
            } else {
                System.out.println("it got here...3");
                Intent intent = new Intent(getApplication(), ActivityRegistration.class);
                startActivity(intent);
                finish();
                overridePendingTransition(R.anim.enter, R.anim.exit);
            }
        }catch(Exception ex){

        }

答案 1 :(得分:0)

您可以在活动A 中定义一个具有所需名称的私人,而不是默认的共享偏好设置,如下所示。

SharedPreferences preferences = getSharedPreferences("myPreferences",0);
        SharedPreferences.Editor editor= preferences.edit();
        editor.putString("userName","raju");
        editor.commit();

如果您想从 Activty A (我的意思是在同一活动中)的共享偏好中检索该值,您可以使用以下代码..

String user_name= preferences.getString("userName","N/A");

或者活动B (我的意思是在其他一些活动中),这次你不需要编辑器(用于检索)..代码如下

SharedPreferences preferences = getSharedPreferences("myPreferences",0);
String user_name= preferences.getString("userName","N/A");