2016-06-14 13 views
1

SharedPreferencesを使用して簡単なログインとログアウトセッションを行っています。コードが正しくても共有設定でNullPointerExceptionが表示される

致命的な例外:メイン プロセス:com.chayan.jecrcuniversity、PID:16940 のjava.lang.NullPointerException:インタフェースメソッド 「android.content.SharedPreferences $を起動しよう。しかし、私はこのエラーを取得しています com.chayan.jecrcuniversity.StudentLogin $ 1.onClick(StudentLogin.java:40)でnullオブジェクト参照 上のエディタ android.content.SharedPreferences.edit()」ここで

が私の活動コード:

public class StudentLogin extends AppCompatActivity { 

Button submit; 
EditText un,pass; 

public static final String MyPREFERENCES = "MyPrefs" ; 
public static final String Username = "unameKey"; 
public static final String Password = "passKey"; 
//public static final String Email = "emailKey"; 
SharedPreferences sharedpreferences; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.login); 
    un=(EditText)findViewById(R.id.editText4); 
    pass=(EditText)findViewById(R.id.editText6); 
    submit=(Button)findViewById(R.id.button6); 

    sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE); 

    submit.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      String username=un.getText().toString(); 
      String password=pass.getText().toString(); 

      SharedPreferences.Editor editor = sharedpreferences.edit(); 

      editor.putString(Username, username); 
      editor.putString(Password, password); 
      editor.apply(); 

      startActivity(new Intent(StudentLogin.this,MainActivity.class)); 
       Toast.makeText(StudentLogin.this,"Welcome, "+un.getText().toString(),Toast.LENGTH_LONG).show(); 

     } 
    }); 
} 
} 
+0

'getSharedPreferences(MyPREFERENCES、Context.MODE_PRIVATE);'ヌル – SripadRaj

+0

を返しているあなたの質問にコピー/貼り付けエラーがない場合、私はこの問題の原因を参照してくださいcan't。あなたのsharedPreferencesは、正しい場所であるonCreate()の後に作成されます。元のROMまたはカスタムROMを使用していますか? – Opiatefuchs

+0

あなたのアプリを削除してから、再インストールしてください。新しい建物の後に引き継がれない変更を加えたかもしれません。 – Opiatefuchs

答えて

0

上記の方法で問題がある場合は、PreferenceManagerクラスを試してみてください。

SharedPreferences sharedPreferences = PreferenceManager 
       .getDefaultSharedPreferences(this); 
     Editor editor = sharedPreferences.edit(); 
     editor.putString(key, name); 
     editor.apply(); 

SharedPreferencesから名前を取得するには:

SharedPreferences sharedPreferences = PreferenceManager 
       .getDefaultSharedPreferences(this); 
     String name = sharedPreferences.getString(key, "default value"); 
+0

しかし、これは、質問者がデフォルトの共有設定を使用したくない場合に役立ちません。 – Opiatefuchs

+1

これは私のデータを保存していません。 –

+0

独自のファイルで設定を保存するために書いたコードと、私がinbuildファイル名に与えたコードはどちらもうまくいきます。プロジェクトをきれいにしてもう一度実行してみてください。 –

0

が共有好みの値を保存し、取得するには、この2つのメソッドを使用しますSharedPreferencesに名前を保存するには

public void savePreferences(Context context, 
             String key, String value) { 
     SharedPreferences sharedPreferences = PreferenceManager 
       .getDefaultSharedPreferences(context); 
     SharedPreferences.Editor editor = sharedPreferences.edit(); 
     editor.putString(key, value); 
     editor.commit(); 
    } 

SharedPreferences使用からこの方法で値を取得する:

public String getPreferences(Context context, String prefKey) { 
    SharedPreferences sharedPreferences = PreferenceManager 
      .getDefaultSharedPreferences(context); 
    return sharedPreferences.getString(prefKey, ""); 
} 

編集:どのように使用する:

を値を保存するには、この行を使用します。

savePreferences(getApplicationContext(),"KEY","THIS_IS VALUE"); 

を価値を得るには、次の行を使用してください:

getPreferences(getApplicationContext(),"KEY"); 
関連する問題