SharedPreferences用于显示文字,不显示

问题描述 投票:0回答:2

我想设置用户文本在我的抽屉式导航栏。对于两个值的名字,当然我打电话从数据库类的字符串方法并将其存储在一个字符串。另外两个值ID和电子邮件,我从用户那里得到它,并将其存储。我使用SharedPreferences传递值。然后在里面的onCreate我的导航活动我得到的值,然后将其设置到适当的TextView。但是什么也不显示。它仍然注册后空。我到底做错了什么?

我还要提到的是,我不登记后开始导航活动。它的注册纪录>登录 - > Dashboard->导航。因此,它的第四活性到我传递的价值观。我已经使用谷歌提供的导航活动,并建立了内部的setText的onCreate,仍然没有得到所需的输出。

导航:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_navigation);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.addDrawerListener(toggle);
        toggle.syncState();

        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);

        txtName = (TextView) findViewById(R.id.n);
        txtsid = (TextView) findViewById(R.id.s);
        txtcourse = (TextView) findViewById(R.id.c);
        txtemail = (TextView) findViewById(R.id.e);

        SharedPreferences myPrefs = getSharedPreferences("myPrefs", MODE_PRIVATE);

            String name = myPrefs.getString("name", "null");
            String course = myPrefs.getString("course", "null");
            String sid = myPrefs.getString("sid", "null");
            String email = myPrefs.getString("email", "null");

            if (myPrefs.contains("name")) txtName.setText(name);
            if (myPrefs.contains("course")) txtcourse.setText(course);
            if (myPrefs.contains("sid")) txtsid.setText(sid);
            if (myPrefs.contains("email")) txtemail.setText(email);


    }

寄存器:

buttonRegister.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (validate()) {
                    String Email = editTextEmail.getText().toString();
                    String SID = editTextSID.getText().toString();
                    String Password = editTextPassword.getText().toString();
                    progressBar.setVisibility(View.VISIBLE);

                    //Check in the database is there any user associated with  this email

                    if (!sqliteHelper.ifUserRegistered(SID) && sqliteHelper.ifUserExists(SID) && !sqliteHelper.isEmailExists(Email)) {

                        sqliteHelper.registerUser(new User(null, Email, SID, Password));
                        Snackbar.make(buttonRegister, "User created successfully! Please Login ", Snackbar.LENGTH_LONG).show();

                        String name = sqliteHelper.getUserNameFromSID(SID);
                        String course = sqliteHelper.getUserCourseFromSID(SID);
                        SharedPreferences myPrefs = getSharedPreferences("SharedPref", MODE_PRIVATE);
                        SharedPreferences.Editor editor = myPrefs.edit();
                        editor.putString("name", name);
                        editor.putString("course", course);
                        editor.putString("sid", SID);
                        editor.putString("email", Email);
                        editor.commit();

                        new Handler().postDelayed(new Runnable() {
                            @Override
                            public void run() {
                                finish();
                            }
                        }, Snackbar.LENGTH_LONG);

我textviews正在与刚刚布局的高度和宽度属性nav_header.xml,这包括在headerlayout属性下的主要navigation.xml。

android textview android-sqlite sharedpreferences settext
2个回答
1
投票

你的问题是由不正确的文件名引起的。

在你注册,你用getSharedPreferences("SharedPref", MODE_PRIVATE);基本上,你SharedPreference文件名为SharedPref。

然而,在导航中,您使用getSharedPreferences("myPrefs", MODE_PRIVATE);基本上,你取名叫myPrefs一个SharedPreference文件。

所以你只是保存到一个文件,而是试图获取从另一个文件中的数据。

因此,在你导航,当你编码你setText()这样:

if (myPrefs.contains("name")) txtName.setText(name);
if (myPrefs.contains("course")) txtcourse.setText(course);
if (myPrefs.contains("sid")) txtsid.setText(sid);
if (myPrefs.contains("email")) txtemail.setText(email);

有没有办法让myPrefs文件将包含这些名字,所以它会总是失败的检查和setText()永远不会被调用。

因此,对于这种修复是简单地使用相同的文件名。

在导航取代:

SharedPreferences myPrefs = getSharedPreferences("myPrefs", MODE_PRIVATE);

有:

SharedPreferences myPrefs = getSharedPreferences("SharedPref", MODE_PRIVATE);

1
投票

尝试更换你的代码,

txtName = (TextView) findViewById(R.id.n);
        txtsid = (TextView) findViewById(R.id.s);
        txtcourse = (TextView) findViewById(R.id.c);
        txtemail = (TextView) findViewById(R.id.e);

NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
View headerView = navigationView.getHeaderView(0); 
txtName  = (TextView)  headerView.findViewById(R.id.n);
txtsid = (TextView) headerView.findViewById(R.id.s);
txtcourse = (TextView) headerView.findViewById(R.id.c);
txtemail = (TextView) headerView.findViewById(R.id.e);
© www.soinside.com 2019 - 2024. All rights reserved.