2012-06-07 87 views
0

我正在使用需要登录的android应用程序。我想检查用户何时按PostIdea活动按钮,然后检查用户是否登录,如果没有,则重定向到登录页面,否则继续执行任务。SharedPreferences登录android

这里我使用SharedPreferences。现在当我按下登录按钮后,用户名&密码添加到SharedPreferences,当按下PostIdea活动,然后我得到用户名&密码。

但我的问题是,当我重新启动应用程序,并去PostIdea活动不登录则记得上次登录SharedPreferences data.How的(用户名/密码),我可以从SharedPreferences删除数据,这样我的应用程序正常工作让我知道我犯的错误,或者有任何其他解决方案来解决我的问题。

谢谢。

LoginActivity.class

public class LoginActivity extends CheerfoolznativeActivity { 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_login); 
    setHeader("Login"); 

    editUser = (EditText) findViewById(R.id.login_useredit); 
    editPass = (EditText) findViewById(R.id.login_passedit); 
    txterror = (TextView) findViewById(R.id.login_error); 
    textlogin = (TextView) findViewById(R.id.login_postidea_textView); 
    btngotoregister = (Button) findViewById(R.id.login_btnLinkToRegisterScreen); 
    btnlogin = (Button) findViewById(R.id.login_button); 
    pgb = (ProgressBar) findViewById(R.id.login_progressBar); 

    btnlogin.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      new Login().execute(); 

     } 
    }); 

} 

public class Login extends AsyncTask<Void, Void, Void> { 

    int i = 0; 
    String uName ; 
    String Password; 

    @Override 
    protected void onPreExecute() { 
     // TODO Auto-generated method stub 
     super.onPreExecute(); 

     uName = editUser.getText().toString().trim(); 
     Password = editPass.getText().toString().trim(); 

     if (uName.equals("") | Password.equals("")) { 
      Toast.makeText(getApplicationContext(), "Enter the Data", 
        Toast.LENGTH_SHORT).show(); 

      if (editUser.length() == 0) { 
       editUser.setError("Enter Username"); 
      } 
      if (editPass.length() == 0) { 
       editPass.setError("Enter Password"); 
      } 
     } else { 

      pgb.setVisibility(View.VISIBLE); 
     } 

    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     // TODO Auto-generated method stub 


      String loginURL = "http://www.cheerfoolz.com/rest/user/login"; 

      strResponse = util.makeWebCall(loginURL, uName, Password); 

     return null; 
    } 

    @Override 
    public void onPostExecute(Void result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 

    txterror.setText(""); 

      try { 
       if (strResponse.substring(KEY_SUCCESS) != null) { 
        txterror.setText(""); 

        // SharedPreferences Logic 
        SharedPreferences userDetails =getSharedPreferences("userdetails", MODE_PRIVATE); 
        Editor edit = userDetails.edit(); 
        edit.clear(); 
        edit.putString("username", uName); 
        edit.putString("password", Password); 
        edit.commit(); 


        new FetchUserProfileTask().execute(); 

       } else { 
        txterror.setText("Username and Password Not valid !!!"); 
       } 
      } catch (Exception e) { 
       // TODO: handle exception 
      } 

    } 

} 

public class FetchUserProfileTask extends AsyncTask<Void, Void, Void> { 

    int i = 0; 

    @Override 
    protected void onPreExecute() { 
     // TODO Auto-generated method stub 
     super.onPreExecute(); 


    } 

    @Override 
    protected Void doInBackground(Void... params) { 

     //logic for the featch user profile data 

    return null; 
    } 

    @Override 
    public void onPostExecute(Void result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 

     pgb.setVisibility(View.GONE); 
     displayProfile(); 

    } 
} 

public void displayProfile() { 

    Intent in1 = new Intent(LoginActivity.this, post_myprofile.class); 
    in1.putExtra("loginObject", bean); 
    startActivity(in1); 
} 

} 

Post_idea_Activity.class

public class Post_idea_Activity extends CheerfoolznativeActivity { 

TextView txtwelcome; 
String Uname=""; 
String pass = ""; 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 


    SharedPreferences userDetails = getSharedPreferences("userdetails", MODE_PRIVATE); 
    System.out.println("value of the userdertails ==========>"+ userDetails); 
    //String Uname=""; 
    //String pass= ""; 

    Uname = userDetails.getString("username", ""); 
    pass = userDetails.getString("password", ""); 

    Toast.makeText(getApplicationContext(),"username : "+Uname +" \n password :"+pass, Toast.LENGTH_SHORT).show(); 

    if (Uname.equals(null)) 
    { 
     Intent in1 = new Intent(this, LoginActivity.class); 
     in1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     startActivity(in1); 

    } 
    else { 

     setContentView(R.layout.post_idea); 
     setHeader("Post idea"); 

     txtwelcome =(TextView)findViewById(R.id.post_welcome_text); 
      } 


     } 

    // coding for the layout 
} 
+1

你的意思是说你不想记住用户名和密码,并且希望用户每次在前台应用程序时都提供凭证?你想要这个吗? – Shraddha

+0

“但是我的问题是,当我重新启动应用程序并且在没有登录的情况下转到PostIdea活动时,它会记住SharedPreferences数据的最后一次登录(用户名/密码)。”就个人而言,这正是我想从Android应用程序中获得的行为。我希望它记住我的用户名和密码。请记住,只有一个人倾向于使用Android设备......这似乎是其他应用程序中的标准行为。 – James

+1

你想清除启动画面中的共享首选项数据? – Pinki

回答

1

当您的应用程序启动时清除您的共享偏好设置。

SharedPreferences userDetails =getSharedPreferences("userdetails", MODE_PRIVATE); 
Editor edit = userDetails.edit(); 
edit.clear(); 
edit.commit(); 

您可以在应用程序的Application类中编写它。

+0

谢谢,使用该命令清除用户名和密码,但是如何在无需登录的情况下按postIdea按钮时将意图传递到登录页面,我试过这个。 SharedPreferences userDetails = getSharedPreferences(“userdetails”,MODE_PRIVATE);\t \t Uname = userDetails.getString(“username”,“”); \t \t pass = userDetails.getString(“password”,“”); \t \t \t \t if(Uname。等于(null)) \t \t { \t \t \t Intent in1 = new Intent(this,LoginActivity.class); \t \t \t startActivity(in1); \t \t \t \t \t } \t \t 其他\t \t {\t \t \t \t \t \t \t \t的setContentView(R.layout.post_idea); \t \t \t setHeader(“Post idea”); \t \t \t \t \t} –

+2

你应该检查(Uname.equals( “”)) – Shraddha

+0

谢谢,它工作正常。 –

2

清楚在初始屏幕中的共享prefernce使用在初始屏幕下面的代码,这意味着应用程序的第一活动

SharedPreferences userDetails =getSharedPreferences("userdetails", MODE_PRIVATE); 
        Editor edit = userDetails.edit(); 
        edit.clear(); 
        edit.putString("username", ""); 
        edit.putString("password", ""); 
        edit.commit(); 
+0

谢谢,但我现在还没有实现初始屏幕。 –

+0

然后在开始登录活动之前使用此共享偏好设置 – Pinki

1
Write in login page..... 
    //variables 
    String PREFS_USER_ID = "USER_ID"; 
    String PREF_NAME = "Pref"; 
    String USER_ID; 
    //write in where u want to store data.... 
    setPreferences(PREF_NAME, PREFS_USER_ID, USER_ID); 
    // methods 
    private void setPreferences(String preferenceName, String key, String value) 
    { 
      SharedPreferences settings = getSharedPreferences(preferenceName, 0); 
      SharedPreferences.Editor editor = settings.edit(); 
      editor.putString(key, value); 
      editor.commit(); 
    } 
    private String getSharedPreferences(String preferenceName, String key) 
    { 
      // Restore preferences 
      SharedPreferences settings = getSharedPreferences(preferenceName, 0); 
      String value = settings.getString(key, null); 
      return value; 
    } 
    in the other activity u get user name and password......... 
    String userid=getSharedPreferences(PREF_NAME, PREFS_USER_ID); 
    //method 
    private String getSharedPreferences(String preferenceName, String key) 
    { 
     // Restore preferences 
      SharedPreferences settings = getSharedPreferences(preferenceName, 0); 
      String value = settings.getString(key, null); 
      return value; 
    } 
// for delete or remove the data from sharepreferences 
SharedPreferences wmbPreference = PreferenceManager.getDefaultSharedPreferences(this); 
    SharedPreferences.Editor editor = wmbPreference.edit(); 
    editor.clear(); 
    editor.commit(); 
+0

谢谢,但它不workig.I已将代码从sharedprefernce中删除日期到我的主要活动。 –