sharedpreferences数据丢失时按下回退按钮android?
我有登录活动并将数据保存到sharedpreferences数据存储中。sharedpreferences数据丢失时按下回退按钮android?
当我打开应用程序,然后第一次登录活动加载和填充用户凭据并存储在sharedpreferences中,打开主要活动,但当我按下主活动sharedpreferences数据丢失后按钮。
下一次当我打开应用程序它显示登录活动,而不是应该打开主要活动,因为我这次匹配来自sharedpreferences的数据。
我的登录活动
public class Login extends AppCompatActivity implements View.OnClickListener {
private String output;
private Toolbar toolbar;
private Button button;
EditText Username,Password;
String myURL,userValue,passValue;
public static final String DEFAULT="N/A";
List<DataModel> loginList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
toolbar = (Toolbar) findViewById(R.id.app_bar);
setSupportActionBar(toolbar);
Username = (EditText) findViewById(R.id.etUsername);
Password = (EditText) findViewById(R.id.etPassword);
button = (Button) findViewById(R.id.btn_login);
button.setOnClickListener(this);
SharedPreferences sharedPreferences = getSharedPreferences("loginData",this.MODE_PRIVATE);
String user = sharedPreferences.getString("username",DEFAULT);
String pass = sharedPreferences.getString("password",DEFAULT);
if(user.equals(DEFAULT) || pass.equals(DEFAULT) && user==null && pass ==null)
{
Toast.makeText(this,"No Data was found",Toast.LENGTH_LONG).show();
}else{
Toast.makeText(this,"Data was found",Toast.LENGTH_LONG).show();
Toast.makeText(this,user+pass,Toast.LENGTH_LONG).show();
CheckOnline();
}
}
private void CheckOnline() {
if(inOnline())
{
String user,pass="";
SharedPreferences sharedPreferences = getSharedPreferences("loginData", this.MODE_PRIVATE);
user = sharedPreferences.getString("username", DEFAULT);
pass = sharedPreferences.getString("password", DEFAULT);
String getStatus = sharedPreferences.getString("LoggedIn", DEFAULT);
if (getStatus.equals("true")) {
Toast.makeText(this, user + pass, Toast.LENGTH_LONG).show();
myURL = "http://www.example.com/extra/login.php?user=" + user + "&pass=" + pass;
requestData(myURL);
}
}
else
{
Toast.makeText(this, "Network isn't available", Toast.LENGTH_LONG).show();
}
}
protected boolean inOnline()
{
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if(netInfo!=null && netInfo.isConnectedOrConnecting())
{
return true;
}
else{
return false;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
private void requestData(String uri) {
LoginCheck check=new LoginCheck();
check.execute(uri);
}
@Override
public void onClick(View v) {
// startActivity(new Intent(this, MainActivity.class));
if(v.getId()==R.id.btn_login)
{
if(inOnline())
{
userValue = Username.getText().toString();
passValue = Password.getText().toString();
myURL = "http://www.example.com/extra/login.php?user="+userValue+"&pass="+passValue;
requestData(myURL);
}
else
{
Toast.makeText(this, "Network isn't available", Toast.LENGTH_LONG).show();
}
// LoginCheck loginCheck = new LoginCheck();
// loginCheck.execute(new String[]{"http://www.dialerphilippines.com/predictivedialervoip/extra/login.php"});
}
}
protected String updateDisplay()
{
if(loginList != null) {
for(DataModel login : loginList) {
output = (login.getLoginResult() + "\n");
}
}
else{
output = "null hai";
}
return output;
}
@Override
public void onBackPressed() {
Login.this.finish();
}
private class LoginCheck extends AsyncTask<String,String,String>{
ProgressDialog dialog = new ProgressDialog(Login.this);
@Override
protected void onPreExecute() {
dialog.setMessage("Login....");
dialog.show();
}
@Override
protected String doInBackground(String... params) {
String content = null;
try {
content = HttpManager.getData(params[0]);
} catch (IOException e) {
e.printStackTrace();
return null;
}
return content;
}
@Override
protected void onPostExecute(String result) {
// loginList = JSONParser.parseLogin(result);
// String my = StringUtils.deleteWhitespace
// startActivity(new Intent(this, MainActivity.class));
String strWithoutWhiteSpace = result.trim();
// Integer res = Integer.parseInt(strWithoutWhiteSpace);
if(strWithoutWhiteSpace.equals("success")) {
SharedPreferences sharedPreferences = getSharedPreferences("loginData",MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("username",userValue);
editor.putString("password", passValue);
editor.putString("LoggedIn", "true");
editor.commit();
startActivity(new Intent(Login.this, MainActivity.class));
finish();
}
else{
Toast.makeText(Login.this, "Either Username or Password is not correct", Toast.LENGTH_SHORT).show();
}
dialog.dismiss();
}
}
}
完整代码,您可以创建包含Isloggedin的条件是否为真另一个共享偏好值,并用它来重定向你的活动。
String getStatus = pref.getString("LoggedIn", "nil");
if (getStatus.equals("true")) {
// go to main or wherever your want.
startActivity(new Intent(this, MYActivity.class));
} else {
// TO DO - go to login page
}
当登录验证并且您正在更新您的共享首选项或将您的值“登录”进行登录时;更新您的isloggedin偏好。
editor.putString("LoggedIn", "true");
editor.commit();
还通过重写onbackpressed来控制你的压抑事件。
@Override
public void onBackPressed() {
// TO DO
}
Providing Proper Back Navigation
编辑
您的附加信息后: 1.我不知道如何在onbackpressed事件整理你的活动是有帮助的。将活动重定向到其他地方会更好,而不是完成活动。这对我来说没有意义。例如
@Override
public void onBackPressed() {
// TO DO
startActivity(new Intent(this, SomeActivityIWantTheUserToGoto.class));
}
另外,我看不到你从哪里得到字符串结果。
除此之外。我建议你实施我的建议。完整地检查你的字符串结果。这个问题越来越多,并且有一个时间点我不能继续参加。
谢谢。
EDIT2
我建议你登录在你的postexecute什么结果。其实检查结果是什么。在
我已经做了它看到我的上面的代码我添加了我的异步代码 –
@ManishTiwari我看不到你在哪里调用onpostexecute。我真的不能跟随你的代码。你从哪里得到字符串结果。你也没有按照我所看到的回答建议。实现第三个共享首选项值 –
@ManishTiwari你需要显示你从哪里得到结果。另外后面的新闻可能会导致问题,所以我建议你也重写你的背部新闻事件。没有看到整个项目很难说清楚。 –
插入数据共享Prefrences
SharedPreferences.Editor editor = getSharedPreferences(FILE_NAME, MODE_PRIVATE).edit();
editor.putString("name", "John");
editor.putInt("fName", "ALEX");
editor.commit();
从存储共享Prefrences
SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
String name = prefs.getString("name", "default_value");
String fName= prefs.getInt("fName", "default_value");
邮政你在哪里存储该'SharedPreferences'代码获取回数据。 – camelCaseCoder
嗯,我做了一个潜在错误的假设,你知道如何将这些值放入你的共享偏好中。如果你不让我知道。 –
您是否正在为您的代码添加更改,因为人们会提供答案或者这是您的原始代码? –