23

ユーザーログインのセッションを維持する方法を教えてください。たとえば、ユーザーがアプリケーションにサインインする場合、ユーザーがログアウトするか、Android の gmail と同様にアプリケーションをアンインストールしない限り、サインインする必要があります。

4

10 に答える 10

45

あなたのために1つのクラスを作りますSharedPreferences

public class Session {

    private SharedPreferences prefs;

    public Session(Context cntx) {
        // TODO Auto-generated constructor stub
        prefs = PreferenceManager.getDefaultSharedPreferences(cntx);
    }

    public void setusename(String usename) {
        prefs.edit().putString("usename", usename).commit();
    }

    public String getusename() {
        String usename = prefs.getString("usename","");
        return usename;
    }
}

このクラスを使用したいときに作成した後、次のように使用します。このクラスのオブジェクトを次のように作成します

private Session session;//global variable 
session = new Session(cntx); //in oncreate 
//and now we set sharedpreference then use this like

session.setusename("USERNAME");

ユーザー名を取得したいときはいつでも、セッションオブジェクトに対して同じ作業を行い、これを呼び出す必要があります

session.getusename();

パスワードも同様

于 2013-12-19T10:14:18.263 に答える
17

を使用してこれを実現できますAccountManager

コードサンプル

// method to add account..
private void addAccount(String username, String password) {
    AccountManager accnt_manager = AccountManager
            .get(getApplicationContext());

    Account[] accounts = accnt_manager
            .getAccountsByType(getString(R.string.account_type)); // account name identifier.

    if (accounts.length > 0) {
        return;
    }

    final Account account = new Account(username,
            getString(R.string.account_type));

    accnt_manager.addAccountExplicitly(account, password, null);

    final Intent intent = new Intent();
    intent.putExtra(AccountManager.KEY_ACCOUNT_NAME, username);
    intent.putExtra(AccountManager.KEY_PASSWORD, password);
    intent.putExtra(AccountManager.KEY_ACCOUNT_TYPE,
            getString(R.string.account_type));
    // intent.putExtra(AccountManager.KEY_AUTH_TOKEN_LABEL,
    // PARAM_AUTHTOKEN_TYPE);
    intent.putExtra(AccountManager.KEY_AUTHTOKEN, "token");
    this.setAccountAuthenticatorResult(intent.getExtras());
    this.setResult(RESULT_OK, intent);
    this.finish();
}

// method to retrieve account.
private boolean validateAccount() {
    AccountManagerCallback<Bundle> callback = new AccountManagerCallback<Bundle>() {

        @Override
        public void run(AccountManagerFuture<Bundle> arg0) {
            Log.e("calback", "msg");

            try {
                Bundle b = arg0.getResult();
                if (b.getBoolean(AccountManager.KEY_ACCOUNT_MANAGER_RESPONSE)) {
                    //User account exists!!..
                }    
            } catch (OperationCanceledException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (AuthenticatorException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    };

    AccountManager accnt_manager = AccountManager
            .get(getApplicationContext());

    Account[] accounts = accnt_manager
            .getAccountsByType(getString(R.string.account_type));

    if (accounts.length <= 0) {
        return false;
    } else {
        loginNameVal = accounts[0].name;
        loginPswdVal = accnt_manager.getPassword(accounts[0]);
        return true;
    }
}
于 2013-12-19T10:21:16.237 に答える
2

セッションを維持するのではなく、簡単な方法が 1 つあります。

つまりboolean、ユーザー名とパスワードを含む 1 つの変数を保存するだけです。デフォルトでは、値を false に設定します。

最初のログインに成功したら、その値を true にします。

次に、Mainactivity でその値を確認します。true の場合は次のアクティビティにジャンプし、それ以外の場合はログイン アクティビティにジャンプします。

于 2013-12-19T10:15:19.987 に答える
1

SharedPreferences でブール値を使用できます。

ログインする前にロードして、ログインが必要かどうかを確認します。

ログイン後、保存してください。

于 2013-12-19T10:12:09.203 に答える
0

いくつかの異なる方法でその動作を取得できます。私が好む方法は、共有設定でフラグを設定することです。ユーザーがログインするとき、アプリの起動時にチェックしてください。デフォルト値を取得した場合、ユーザーはloggendではありません。それ以外の場合は、フラグ(ユーザー名を使用)を設定し、ログインセクションを回避する必要があります。

于 2013-12-19T10:12:12.047 に答える
0

ユーザーがログアウトするまで、ユーザーデータを共有設定に保存します。ユーザーがログアウトすると、共有設定からデータが消去されます。

于 2013-12-19T10:15:43.983 に答える
0

ソースコード

https://drive.google.com/open?id=0BzBKpZ4nzNzUcUZxeHo0UnJ5UHc

Androidで以前のログインIDを取得する ここに画像の説明を入力

**After Login save Email ID is SharedPreferences** 

    emaidId = et_Email.getText().toString().trim();

    SharedPreferences ss = getSharedPreferences("loginSession_key", 0);
    Set<String> hs = ss.getStringSet("set", new HashSet<String>());
    hs.add(emaidId);
    SharedPreferences.Editor edit = ss.edit();
    edit.clear();
    edit.putStringSet("set", hs);
    edit.commit();

===================onCreate()====================
===================AutoCompleteTextView set Adapter===================

**Fetch PRevious Login Email id in email EditText**

SharedPreferences sss = getSharedPreferences("loginSession_key", 0);            // todo loginSession_key   key name ALWAYS SAME
Log.i("chauster", "2.set = " + sss.getStringSet("set", new HashSet<String>()));
Log.e("Session", "Value->" + sss.getStringSet("set", new HashSet<String()));
ArrayList<String> al = new ArrayList<>();
al.addAll(sss.getStringSet("set", new HashSet<String>()));
//Creating the instance of ArrayAdapter containing list of language names
ArrayAdapter<String> adapter = new ArrayAdapter<String>
                (this, android.R.layout.select_dialog_item, al);
//Getting the instance of AutoCompleteTextView
et_Email.setThreshold(1);//will start working from first character
et_Email.setAdapter(adapter);//setting the adapter data into the 
于 2017-09-19T12:19:38.040 に答える