SharedPreferences используется для отображения текста, не показывая - PullRequest
0 голосов
/ 09 февраля 2019

Я пытаюсь установить текст пользователя в своем ящике навигации.Для двух значений name и course я вызываю строковый метод из класса базы данных и сохраняю его в виде строки.Два других значения id и email я получаю от пользователя и сохраняю.Я использую SharedPreferences для передачи значений.Затем в моей навигационной активности внутри onCreate я получаю значения, а затем устанавливаю соответствующий текстовый вид.Но ничего не появляется.После регистрации остается пустым.Что я здесь не так делаю?

Следует также отметить, что я не начинаю навигационную деятельность после регистрации.Это Регистрация-> Логин-> Панель управления-> Навигация.Так что это 4-е мероприятие, которому я передаю значения.Я использовал навигацию, предоставленную Google, и создал 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);

Мои текстовые представления находятся в nav_header.xml только с атрибутом высоты и ширины макета, и это включено в основной файл navigation.xml под атрибутом headerlayout.

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

Ваша проблема вызвана неправильным именем файла.

В вашем Регистре , вы использовали getSharedPreferences("SharedPref", MODE_PRIVATE); По сути, ваш файл SharedPreference называется SharedPref .

Однако в Navigation вы использовали getSharedPreferences("myPrefs", MODE_PRIVATE); По сути, вы выбираете файл SharedPreference с именем myPrefs .

Итак, вы просто сохраняете в один файл, но пытаетесь извлечь эти данные из другого файла.

Следовательно, в вашей Навигации , когда вы закодировали свой 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);
0 голосов
/ 09 февраля 2019

попробуйте заменить ваш код,

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);
...