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(); 
    } 
} 
} 
+3

邮政你在哪里存储该'SharedPreferences'代码获取回数据。 – camelCaseCoder

+0

嗯,我做了一个潜在错误的假设,你知道如何将这些值放入你的共享偏好中。如果你不让我知道。 –

+0

您是否正在为您的代码添加更改,因为人们会提供答案或者这是您的原始代码? –

完整代码,您可以创建包含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什么结果。其实检查结果是什么。在

+0

我已经做了它看到我的上面的代码我添加了我的异步代码 –

+0

@ManishTiwari我看不到你在哪里调用onpostexecute。我真的不能跟随你的代码。你从哪里得到字符串结果。你也没有按照我所看到的回答建议。实现第三个共享首选项值 –

+0

@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");