簡體   English   中英

讓我保持登錄Android CheckBox的狀態

[英]Keep me logged in CheckBox Android

我正在創建一個我為其創建了登錄和注冊頁面的android應用。 我想在登錄頁面中實現“保持登錄狀態”功能。 我想我知道該怎么辦,但是幾乎所有嘗試都給我一個錯誤。

我必須將復選框的狀態存儲在SharedPreference中,然后將其與if else語句一起使用,如果選中,它將跳過登錄活動並啟動主活動,否則將登錄活動。

如果有人可以提供示例代碼,將很有幫助。

ChechBox keeplog = (CheckBox)findBiewById(R.Id.checkbox1)

如何將檢查狀態存儲在“共享首選項”中,以及如何以布爾值或字符串的形式獲取其狀態,以便可以將其與if-else語句一起使用?

請嘗試以下方式,聲明一個布爾變量。

CheckBox keeplog = (CheckBox) findViewById(R.id.checkBox1);
boolean isChecked = false;

然后使用CheckedChangeListener將復選框的狀態存儲在共享首選項中。

keeplog.setOnCheckedChangeListener(new OnCheckedChangeListener() {

    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        SharedPreferences settings = getSharedPreferences("PREFS_NAME", 0);
        SharedPreferences.Editor editor = settings.edit();
        editor.putBoolean("isChecked", isChecked);
        editor.commit();
    }
});    

然后,使用以下方法從SharedPreferences獲取復選框的狀態。

SharedPreferences settings1 = getSharedPreferences("PREFS_NAME", 0);
isChecked = settings1.getBoolean("isChecked", false);

現在,使用if語句檢查並開始您的活動,如下所示

if (isChecked) {
    Intent i = new Intent(MainActivity.this, ThirdActivity.class);
    startActivity(i);
} else {
    Intent i = new Intent(MainActivity.this, SecondActivity.class);
    startActivity(i);
}

謝謝。

嘗試以下操作,我粘貼了有關如何連接和登錄ejabberd服務器的代碼,因為沒有它,該代碼對於“記住我”功能來說看起來不完整。 我已添加注釋,以解釋如何在SharedPrefernces中存儲和檢索值。

public class Login extends Activity
{
private XMPPConnection connection;
private ProgressBar progressBar;
private EditText userId;
private EditText password;
private CheckBox rememberMe;
private SharedPreferences sharedPreferences;
private Editor editor;

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    userId = (EditText) findViewById(R.id.user_id);
    password = (EditText) findViewById(R.id.password);
    rememberMe = (CheckBox) findViewById(R.id.remember_me);
    progressBar = (ProgressBar) findViewById(R.id.login_progress);
                //Retrieving SharedPreferences
    sharedPreferences = this.getPreferences(Context.MODE_PRIVATE);
                //Retrieving editor
    editor = sharedPreferences.edit();
                //Retrieving remember me checkbox's set value which if was stored in SharedPreferences
    if(sharedPreferences.getBoolean(getString(R.string.remember_me), false))
    {
        String uId, pass;
        uId = sharedPreferences.getString(getString(R.string.user_id), "");
        pass = sharedPreferences.getString(getString(R.string.password), "");
        userId.setText(uId);
        password.setText(pass);
        rememberMe.setChecked(sharedPreferences.getBoolean(getString(R.string.remember_me), false));
        new Connection().execute(uId, pass);
    }
}

public void login(View view)
{
    new Connection().execute(userId.getText().toString(), password.getText().toString());
}

private class Connection extends AsyncTask<String, Void, Integer>
{
    private static final int CONNECTION_FAILURE = 0;
    private static final int LOGIN_FAILURE = 1;
    private static final int SUCCESS = 2;

    protected void onPreExecute()
    {
        progressBar.setVisibility(ProgressBar.VISIBLE);
    }

    protected Integer doInBackground(String... strings)
    {
        ConnectionConfiguration conConfig = new ConnectionConfiguration("192.168.1.66", 5222, "domain");
        connection = new XMPPConnection(conConfig);
        try
        {
            connection.connect();
            Log.i("TESTING", "CONNECTED TO " + connection.getHost());
        }
        catch(Exception e)
        {
            Log.e("TESTING", e.getMessage());
            return CONNECTION_FAILURE;
        }
        try
        {
            connection.login(strings[0], strings[1]);
            Log.i("TESTING", "LOGGED IN AS " + connection.getUser());
            Presence presence = new Presence(Presence.Type.available);
            connection.sendPacket(presence);
        }
        catch(Exception e)
        {
            Log.e("TESTING", e.getMessage());
            return LOGIN_FAILURE;
        }
        return SUCCESS;
    }

    protected void onPostExecute(Integer integer)
    {
        progressBar.setVisibility(ProgressBar.GONE);
        switch(integer)
        {
            case CONNECTION_FAILURE:
                Toast.makeText(getApplicationContext(), "Failed to connect to the server.", Toast.LENGTH_LONG).show();
                break;
            case LOGIN_FAILURE:
                Toast.makeText(getApplicationContext(), "Please check your user id and or password.", Toast.LENGTH_LONG).show();
                break;
            case SUCCESS:
                if(rememberMe.isChecked())
                {
                                                        //Setting value in SharedPrefernces using editor.
                    editor.putBoolean(getString(R.string.remember_me), rememberMe.isChecked());
                    editor.putString(getString(R.string.user_id), userId.getText().toString());
                    editor.putString(getString(R.string.password), password.getText().toString());
                                                         //Committing the changes.
                    editor.commit();
                }
                else
                                                         //Clearing SharedPreferences.
                    sharedPreferences.edit().clear().commit();
                startActivity(new Intent(getApplicationContext(), Home.class));

        }
    }
}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM