0

ログインが必要なAndroidアプリケーションに取り組んでいます。ユーザーが PostIdea アクティビティ ボタンを押したときにチェックしてから、ユーザーがログインしているかどうかを確認し、ログインしていない場合はログイン ページにリダイレクトし、それ以外の場合はタスクを続行します。

ここでは、そのために SharedPreferences を使用しています。ログインボタンを押すと、ユーザー名とパスワードが SharedPreferences に追加され、PostIdea アクティビティを押すと、ユーザー名とパスワードが取得されます。

しかし、私の問題は、アプリケーションを再起動し、ログインせずに PostIdea アクティビティに移動すると、SharedPreferences データの最後のログイン (ユーザー名/パスワード) が記憶されることです。アプリケーションが正しく動作するように、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
}
4

3 に答える 3

2

スプラッシュ画面で共有設定をクリアする スプラッシュ画面で以下のコードを使用します。これは、アプリケーションの最初のアクティビティを意味します

SharedPreferences userDetails =getSharedPreferences("userdetails", MODE_PRIVATE);
                    Editor edit = userDetails.edit();
                    edit.clear();
                    edit.putString("username", "");
                    edit.putString("password", "");
                    edit.commit();
于 2012-06-07T09:50:21.420 に答える
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();
于 2012-06-07T10:01:33.147 に答える
1

アプリの起動時に共有設定をクリアします。

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

これは、アプリケーションの Application クラスに記述できます。

于 2012-06-07T09:56:25.290 に答える