0

1 人のユーザーを Android アプリに保存する最良の方法は? の質問と回答を参照してください。

共有設定は実際にどのように機能しますか?

私がやりたいことは次のとおりです。

  • ユーザーが初めてアプリを開くと、ログイン ID とパスワードが追加されます
  • 次回ユーザーがアプリを開くと、以前の ID/パスワードとデータを使用してログインします。(アプリのデータは機密であるため、自動ログインは必要ありません。したがって、携帯電話を使用している友人でさえ、それを見ることができないはずです。)
  • ユーザーがこの ID/パスワードを変更する機能

これは、共有設定を通じて可能ですか? または、SQLlite を使用する必要がありますか? 私はAndroidにまったく慣れていないので、動作するコードと説明を添付していただければ幸いです。

4

3 に答える 3

1

かなり機密性の高いデータをそこに保存することに問題がない限り、共有設定でこれを行うことができます。保存と取得の間にいくつかの共有コードが必要になります。

final static String pfName = "com.super.stuff.preffile.name";
final static String pfCodeForID = "com.super.stuff.pf.id";
final static String pfCodeForPassword = "com.super.stuff.pf.passwd";
final static String pfNoStringPresent = "NO-STRING-PRESENT-HERE";

final static pfCodes = MODE_PRIVATE; // See http://developer.android.com/reference/android/content/Context.html#getSharedPreferences(java.lang.String, int)

情報を保存するには:

String ID = //whatever;
String password = //whatever;

SharedPreferences settings = context.getSharedPreferences(pfName, pfCodes);
SharedPreferences.Editor editor = settings.edit();
editor.putString(pfCodeForID, ID);
editor.putString(pfCodeForPassword, password);
editor.commit();

情報を取得するには:

SharedPreferences settings = context.getSharedPreferences(pfName, pfCodes);

String ID = editor.getString(pfCodeForID, pfNoStringPresent);
String password = editor.getString(pfCodeForPassword, pfNoStringPresent);

if (ID.contentEquals(pfNoStringPresent) && password.contentEquals(pfNoStringPresent)) {
     // Handle the case of nothing stored, ie get ID and password
     }

ユーザー名とパスワードの両方が pfNoStringPresent と同じ場合、これは明らかに失敗します。

この方法で機密データを保存することに懸念がある場合は、データベースに保存するか、何らかの方法で暗号化する必要があります。ID 情報を提供している人物のデバイスに情報が保存されている場合に、その情報を保護することがどれほど重要か、電話からこの情報を取得することが泥棒にとってどれほど重要かなどを判断する必要があります。等

于 2013-03-14T16:40:33.280 に答える
0

かなり単純な Sqlite を使用します。これに従ってください:

public SQLiteDatabase sampleDB;  
sampleDB =  this.openOrCreateDatabase(TABLE_NAME, MODE_PRIVATE, null);    
sampleDB.execSQL("CREATE TABLE IF NOT EXISTS " +
                TABLE_NAME+ "(" + COLUMN_ID
                + " integer primary key autoincrement, " + COLUMN1
                + " text not null,"+ COLUMN2
                + " text not null);");

ここでは、column1 と column2 が値「username」と「password」を持つ文字列である 3 つのフィールドがあります。この作成後、必要に応じてクエリを実行できます。

于 2013-03-14T16:57:59.010 に答える
0

AccountManager と統合してから setUserData を使用します...私が考える最良の方法です。:)

于 2014-02-20T18:05:20.557 に答える