2011-02-02 18 views
0

私は2つのEditTextとチェックボックスとログインボタンでログインページを作成しています。私はデータを保存したいEnabledにチェックボックスを設定している場合 ので、次回のユーザーは、私が持っている分野...
はこのコードを使用していますが、運...Android:ログインの機能を覚えている問題

パブリッククラスLoginPageアクティビティ{

を拡張することを記入する必要はありません。県
EditText d_ID; 
EditText password; 
CheckBox cb; 
ImageButton ib; 

public static final String PREFS_NAME = "MyPrefsFile"; 
public String PREFS_USER; 
public String PREFS__PASS; 
String username; 
String upass; 

SharedPreferences

@Override 
public void onCreate(Bundle savedInstanceState) { 

    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    super.onCreate(savedInstanceState); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
    setContentView(R.layout.loginpage); 

    d_ID = (EditText) findViewById(R.id.dulzuID); 
    password = (EditText) findViewById(R.id.dulzuPASS); 

    cb = (CheckBox) findViewById(R.id.remember); 

    ib = (ImageButton) findViewById(R.id.login); 






     pref = getSharedPreferences(PREFS_NAME, MODE_PRIVATE); 
     username = pref.getString(PREFS_USER, null); 
     upass = pref.getString(PREFS__PASS, null); 
     d_ID.setText(username); 
     password.setText(upass); 




    ib.setOnClickListener(new OnClickListener() { 

     public void onClick(View view) { 

      startActivity(new Intent(LoginPage.this, Features.class)); 
     } 
    }); 

    cb.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

     public void onCheckedChanged(CompoundButton cb1, boolean bln) { 

       PREFS_USER = d_ID.getText().toString();//get user name from EditText 
       PREFS__PASS = password.getText().toString();//get user Password from EditText 
       getSharedPreferences(PREFS_NAME, MODE_PRIVATE).edit().putString(PREFS_USER, username).putString(PREFS__PASS, upass).commit(); 

     } 
    }); 

} 

}

任意のヘルプ?

おかげで...

答えて

2

ユーザーのパスワードの値とユーザー名/パスワードを識別する変数を取得するための変数が混乱していると思います値を設定します。私はあなたがこれらを意図し思い

public String PREFS_USER; 
public String PREFS__PASS; 

保存されたユーザー名とパスワードを入力するための識別子であることを、しかし、あなたはその後、は、彼らはあなたが対応するEditTextsから引っ張ってきたするを設定します。私はあなたのためのコードの一部を書き換えています

public static final String PREFS_NAME = "MyPrefsFile"; 
public static final String PREFS_USER = "prefsUsername"; 
public static final String PREFS__PASS = "prefsPassword"; 
... 
pref = getSharedPreferences(PREFS_NAME, MODE_PRIVATE); 
username = pref.getString(PREFS_USER, ""); 
upass = pref.getString(PREFS__PASS, ""); 
... 
public void onCheckedChanged(CompoundButton cb1, boolean bln) { 
    username = d_ID.getText().toString();//get user name from EditText 
    upass = password.getText().toString();//get user Password from EditText 
    getSharedPreferences(PREFS_NAME, MODE_PRIVATE).edit().putString(PREFS_USER, username).putString(PREFS__PASS, upass).commit(); 
} 

個人的に、私はそのかかわらず、同じようにそれをしないだろう。ユーザーがフォームを送信するときにチェックボックスの値を確認し、その時点でユーザー名&のみを保存します。ユーザがのパスワードを入力する前に、チェックボックスをオフにしてから、チェックボックスを再チェックするとどうなりますか?空の値を保存してユーザーを煩わせることになります。

1

私はあなたが/書き込みのonCreate()メソッド内でこの行を初期化する必要がありだと思います。常に


if (cb.isChecked()) { 

    SharedPreferences pref = getSharedPreferences(PREFS_NAME, MODE_PRIVATE); 
    username = pref.getString(PREFS_USER, null); 
    upass = pref.getString(PREFS__PASS, null); 
    d_ID.setText(username); 
    password.setText(upass); 

} 

あなたのビューが新しい活動がstarts.cb.isEnabledたびに(レンダリングされるよう)になります。

SharedPreferences pref; 

@Override 
public void onCreate(Bundle savedInstanceState) { 

    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    super.onCreate(savedInstanceState); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
    setContentView(R.layout.loginpage); 

    pref = getSharedPreferences(PREFS_NAME, MODE_PRIVATE); 
    ... 
    } 
+0

- 私はonCreate()メソッド内でその行を初期化しましたが、値を取得できません... – Piyush

2

ねえ、あなたがこの部分に小さなミスをしているpiyush私の友人bcozを間違ってくださいそれは時間が有効になっていません。


このように4つのゾルゾルを行うことができます。ユーザーは、ユーザーを押すボタンをログインしたときにそれを保存する]チェックボックスをクリックしたときの値を格納しないことを教えてくれ2のようなWUD


 SharedPreferences pref = getSharedPreferences(PREFS_NAME, MODE_PRIVATE); 
if(!pref.getstring(PREFS_USER,null).equals(null)||!pref.getstring(PREFS_USER,null).equals(""))   
{username = pref.getString(PREFS_USER, null); 

     d_ID.setText(username);} 
    and same for password field 
+0

チェックボックスはデフォルトで有効になっていると思います。それを無効にしない限り。 – junmats

+0

ああ、申し訳ありませんが私の間違いです。shuold b ischecked()。 –

2

一つのこと。ユーザーは、彼がenterdしていないことのチェックボックスをクリックした場合

あなたは.......

をnull値が保存されますと、なぜあなたは両方のオブジェクトシリアライズいけないと2のメモリを、それを保存し、再びそれをdeseralize詳細あなたが2を読む必要があるとき....

public void serializeCredentials(String Username,String Password) { 
      try { 
       FileOutputStream fStream = openFileOutput(namefile.bin, Context.MODE_PRIVATE) ; 
       ObjectOutputStream oStream = new ObjectOutputStream(fStream); 
       oStream.writeObject(Username) ; 
       FileOutputStream fos = openFileOutput(passwordfile.bin, Context.MODE_PRIVATE) ; 
       ObjectOutputStream oos = new ObjectOutputStream(fos); 
       oos.writeObject(Password) ; 
       oStream.flush() ; 
       oStream.close() ; 
       oos.flush() ; 
       oos.close() ; 
       Log.v("Serialization success", "Success"); 
      } catch (Exception e) { 

       Log.v("IO Exception", e.getMessage()); 
      } 
      } 

ありがとう。データを読み込むときにforeget 2を非直列化しないでください。あなたはそれだろう

cb.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

    public void onCheckedChanged(CompoundButton cb1, boolean bln) { 

      PREFS_USER = d_ID.getText().toString();//get user name from EditText 
      PREFS__PASS = password.getText().toString();//get user Password from EditText 

      SharedPreferences.Editor prefEditor = getSharedPreferences(PREFS_NAME, MODE_PRIVATE).edit(); 
      prefEditor.putString(PREFS_USER, username); 
      prefEditor.putString(PREFS__PASS, upass); 
      prefEditor.commit(); 
    } 
}); 

...少なくとも私の場合、それはトリックをしました。..

+1

合意されていますが、これはより面白そうです:SharedPreferencesに暗号化されたユーザ名/パスワードを保存することは、私にとっては良い考えです。 –

+0

それはそうですか...それでは別の方法があります.2これも方法の1つでした......... lolzzzz –

+0

このようなことをシリアライズする方法は、ここで過度のものです。 –

0

はラインで編集ラインをやってみてください..........同様に、それをデシリアライズすることができログインボタンのクリック中にSharedPreferencesにデータを保存するようにN-JOYの提案に従えばもっと良いでしょう。

関連する問題