2012-04-01 9 views
14

私はログイン画面を持つプロジェクトを作成しています。これは、ユーザーが
アプリケーションにログインするために使用されます。このログイン画面は最初に表示する必要があります。ユーザーはそれを入力してログインできますが、ユーザーが2回目にアプリケーションを開くと、アプリケーションはmain.activityを表示する必要があります。 Shared preferenceの使い方ログイン画面を一度だけ表示する方法は?

私はこれを行う方法を理解していません。

+0

私たちと共有しようとしたリンクが不正です。正しいリンクを追加するために質問を編集してください。 –

答えて

30

をあなたは、よりフィット感を参照してください内の任意のクラスを次のように挿入します。これをクラスExampleに挿入するとします。

//Give your SharedPreferences file a name and save it to a static variable 
public static final String PREFS_NAME = "MyPrefsFile"; 

、ユーザーが正常にログインする場合は、以下の操作を行い、評価方法でExampleクラスに注目してください。コードに合わせてこれを変更する必要があります。アプリケーションがを開始したときに、ユーザーが既にログインしたりしていない場合

//User has successfully logged in, save this information 
// We need an Editor object to make preference changes. 
SharedPreferences settings = getSharedPreferences(Example.PREFS_NAME, 0); // 0 - for private mode 
SharedPreferences.Editor editor = settings.edit(); 

//Set "hasLoggedIn" to true 
editor.putBoolean("hasLoggedIn", true); 

// Commit the edits! 
editor.commit(); 

最後に、は、あなたが今評価することができます。まだ変更する必要があるExampleクラスに気づくでしょう。

SharedPreferences settings = getSharedPreferences(Example.PREFS_NAME, 0); 
//Get "hasLoggedIn" value. If the value doesn't exist yet false is returned 
boolean hasLoggedIn = settings.getBoolean("hasLoggedIn", false); 

if(hasLoggedIn) 
{ 
    //Go directly to main activity. 
} 

ホープこれは

EDIT役立ちます:が戻ってあなたがfinish()に新しいものを開始した後活性を有するログイン活動に行くに戻るボタンを使用してからユーザーを防ぐために。

次のコードは、startActivity()を呼び出した後、ログイン活性にfinish()関数を呼び出すことが何であるかを、あなたのコード内で行う必要があるので、Forwarding.java | Android developers

// Here we start the next activity, and then call finish() 
// so that our own will stop running and be removed from the 
// history stack 
Intent intent = new Intent(); 
intent.setClass(Forwarding.this, ForwardTarget.class); 
startActivity(intent); 
Example.this.finish(); 

、から取られました。また

参照:Removing an activity from the history stack

+0

(Example.PREFS_NAME、0)にエラーが表示されます。私はこのコードをアクティビティに追加する必要がありますか? –

+0

@sandiparmal私の答えを慎重に読んでください、私はあなたがコードを挿入する必要があると述べています。 'Example'クラスは' PREFS_NAME'静的変数を作成したクラスと一致するように変更する必要があります。 –

+1

まだデータを書き込んだ後でもログインにジャンプします。私はコードを配置することはできますか? –

1

SharedPreferencesを使用してください。たとえば、いくつかの値を保存し、ログインアクティビティでそれを読んでください。

プロジェクトでは、トークンとユーザーIDを保存しました。したがって、ユーザーがすでにログインしている場合は、承認アクティビティはスキップされます。

P.S.あなたのログインアクティビティがあなたのアプリの最初のアクティビティならば、他のアクティビティで "戻る"キーを押さないように、別のアクティビティを開始する前に終了することを忘れないでください。あなたはこのような何かかもしれないSharedPreferencesでこれを達成するために

+1

ここで私はこの値をどのような活動に保存していますか? –

+0

http://developer.android.com/guide/topics/data/data-storage.html#pref –

1

使用SharedPreferences。たとえば、ブール変数を持ち、アプリケーションの起動時にそれを読み込みます。 ユーザーが初めてアプリを起動したときに、共有環境設定の変数がfalseになるので、ログイン画面を起動し、ログイン後にブール変数を共有プリファレンスでtrueにして、ユーザーがsecnd時間に共有変数優先権は真実になります。ログイン画面をスキップしてメインアクティビティを起動します。コードの下に使用::

public static void saveBooleanInSP(Context _context, boolean value){ 
SharedPreferences preferences = _context.getSharedPreferences("PROJECTNAME", android.content.Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = preferences.edit(); 
editor.putBoolean("ISLOGGEDIN", value); 
editor.commit(); 
}//savePWDInSP() 

のgetValueにSharedPreferenceからのコードの下に使用SharedPreferenceのbooleanストアに

::

public static boolean getBooleanFromSP(Context _context) { 
// TODO Auto-generated method stub 
SharedPreferences preferences = _context.getSharedPreferences("PROJECTNAME", android.content.Context.MODE_PRIVATE); 
return preferences.getBoolean("ISLOGGEDIN", false); 
}//getPWDFromSP() 
1

あなたは(UIなしで)別の空のアクティビティを追加する必要がありますロードすること何よりも前に

@tozka How to Skip the first activity under a condition

によって

はこちらをご覧LoginScreen.ActivityまたはMain.Activityのいずれかをユーザに指示する責任があり、この空のアクティビティに@Telmoマルケスによって記述ロジック、答えを入れて

0

トークンを使用することも、ログインステータスを知る良い方法です.Outhトークンベースのログインでは、ユーザーがアプリケーションにログインすると、ログイン成功時にアクセストークンを取得し、アカウントマネージャーに保護された方法で保存されます。トークンが利用可能であるかどうかを最初にチェックし、利用可能であればメインページにリダイレクトされているか、それ以外の場合はログインアクティビティにリダイレクトされます。