android - 用户使用 SharedPreferences 保持登录 Android 应用程序不起作用

标签 android android-studio

我们几乎在每个应用程序中都看到,用户第一次登录而下次打开应用程序时,他会直接进入应用程序而无需身份验证。因此,我尝试在我的应用程序中创建完全相同的功能,我遵循文档并编码到我的应用程序中。构建成功,但不起作用,关闭应用程序后一直要求身份验证。

代码

package abc.xyz;

import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;


public class MainActivity extends AppCompatActivity {
    Button b;
    SharedPreferences sp;
    EditText username,password;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        b = (Button)findViewById(R.id.button);
        username = (EditText)findViewById(R.id.editText);
        password = (EditText)findViewById(R.id.editText2);
        sp = getSharedPreferences("b", MODE_PRIVATE);

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

                login();

                if(sp.getBoolean("Logged",false)){
                    Intent intent = new Intent(MainActivity.this, Main2Activity.class);
                    startActivity(intent);
                }
            }
        });

    }
    public void login(){


        String user=username.getText().toString().trim();
        String pass=password.getText().toString().trim();
        if(user.equals("admin")&& pass.equals("admin"))
        {
            sp.edit().putBoolean("Logged", true).apply();
            Toast.makeText(this,"Success!",Toast.LENGTH_LONG).show();
            Intent intent = new Intent(MainActivity.this, Main2Activity.class);
            startActivity(intent);

        }else {
            Toast.makeText(this,"username and password do not matched!",Toast.LENGTH_LONG).show();
        }
    }

}

有人可以帮我吗?

最佳答案

您将状态保存为true,然后每次执行登录方法时,您需要在值为true时移动到MainActivity2所以使用

// move to next activity if user is authenticated
if(sp.getBoolean("Logged",false)){
        Intent intent = new Intent(MainActivity.this, Main2Activity.class);
        startActivity(intent);
}
b.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                login();
            }
        });

注意:正如@shb提到的,区分大小写很重要

关于android - 用户使用 SharedPreferences 保持登录 Android 应用程序不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52211177/

相关文章:

android - 向上虚拟键盘

android - 无法在 Android Studio 中编译 exoplayer

android gradle 本地路径不存在

java - 将微调项目存储在字符串值中

java - 错误: If a primary key is annotated with autoGenerate,其类型必须是int、Integer、long或Long

Android - 应用版本控制、更新

android - 从使用返回 html 和 javascript 的 ajax 调用的响应站点创建一个应用程序 - 最简单的方法?

java - 如何下载一些java jar库文件

android-studio - 在 Android Studio 中包含第三方 View 的简单方法?

android - 从混淆的 classes.jar 中移除外部库(在 Android Studio/Gradle 中)