android - 凭据管理上的 Android 错误
问题描述
嗨,那么下面的活动是一个简单的登录!有了这个活动,我在下面的代码中遇到了这两个问题
1)SharedPreferences:一旦用户登录,用户凭据应保持保存以备下次启动,但这仅在用户第二次关闭应用程序时第一次有效,应用程序不保留保存的凭据
2)已保存登录服务:我想在各种服务中禁用保存密码和用户名的请求,以保存登录数据!
我该如何解决这些?
Java 代码:
package app;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.StrictMode;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import org.json.JSONException;
import app.Controller.User;
import app.Service.Permissions;
import app.Service.Support;
import app.View.TabActivity;
public class MainActivity extends AppCompatActivity {
private TextView tvUsername, tvPassword;
private EditText txtUsername, txtPassword;
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setDisplayUseLogoEnabled(true);
//Disabilita da StrictMode di android solo su sdk superiori a 9
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
/* Istanza dei campi */
tvUsername = (TextView) findViewById(R.id.usernametextview);
txtUsername = (EditText) findViewById(R.id.usernameeditext);
tvPassword = (TextView) findViewById(R.id.passwordtextview);
txtPassword = (EditText) findViewById(R.id.passwordtext);
final Button loginbutton = (Button) findViewById(R.id.buttonlogin);
//Configuro la funzione Listener sul login button
loginbutton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Code here executes on main thread after user presses button
if (txtUsername.length() != 0 && txtPassword.length() != 0) {
if (Permissions.isOnline() == true) {
LoginFunction(txtUsername.getText().toString(), txtPassword.getText().toString(), true);
} else {
Support.Notification(MainActivity.this, "Errore", "Non stai navigando");
}
}
}
});
SharedPreferences sp1 = this.getSharedPreferences("Login", Context.MODE_PRIVATE);
String userload = sp1.getString("Username", null);
String pwdload = sp1.getString("Password", null);
LoginFunction(userload, pwdload, false);
}
private void LoginFunction(String Username, String Password, Boolean ShowMessage) {
User u = new User();
Boolean ret = false;
try {
ret = u.Login(Username, Password);
if (ret == true) {
//Salvo le credenziali d'accesso in sharedPrefrences
SharedPreferences sp = this.getSharedPreferences("Login", Context.MODE_PRIVATE);
SharedPreferences.Editor Ed = sp.edit();
Ed.putString("Username", txtUsername.getText().toString());
Ed.putString("Password", txtPassword.getText().toString());
Ed.commit();
//Creo un oggetto Intent da inviare ad una activity
Intent tabhome = new Intent(MainActivity.this, TabActivity.class);
tabhome.putExtra("User", u);
startActivity(tabhome);
} else {
if (ShowMessage == true) {
Support.Notification(MainActivity.this, "Errore", "Login non riuscito");
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
解决方案
您的值未正确存储的问题是:
Ed.commit();
将其替换为
Ed.apply();
第二个2)有什么问题?
// 编辑:
检查我的活动代码:
SharedPreferences prefs = getSharedPreferences(MyConstant.SHARED_PREFERENCES_NAME, MODE_PRIVATE);
if (prefs.getBoolean("firstTimeRun", true)) {
prefs.edit().putBoolean("firstTimeRun", false).apply();
// do something for the first time
}
推荐阅读
- mysql - 在 Django 中使用条件注释时出错:select_format
- r - 使用 age_calc() 将出生日期转换为年龄(包 eeptools)
- python - 更改键盘快捷键以注释掉 Spyder 中的行
- python - python opencv清除噪音并删除框
- docker - Docker 构建失败,当前 .NET SDK 不支持面向 .NET Core 2.1
- php - 如何通过电子邮件发送 PHP 中的整个请求
- javascript - 在刮板完成之前如何锁定 websocket(或状态)连接
- wordpress - wordpress 循环和多个谷歌地图在控制台中出现错误
- python - Flask中验证失败时如何覆盖html默认“请填写此字段”?
- java - Android Studio“找不到参数的方法实现()”