3

ログインおよびログアウト機能用のアプリで、アクティビティの開始時に共有設定が null かどうかを確認していますが、まだ NullPointerException が発生しています。

HomeActivity.java のコードは次のとおりです。

// Username And Password Editbox
String eusername;
String epassword;

// Shared Preferences String declaration
String spusername;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);     

    SharedPreferences spreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    spusername=spreferences.getString("spusername","");

    if(!spusername.equals(""))
    {   
        Log.e("Spusername not null","-->"+spusername);
    }
    if(spusername==null)
    {
        Log.e("Spusername null","-->"+spusername);
    }
}
4

6 に答える 6

10

containsSharedPreferencesにメソッドがあります。

boolean isSpUsernameDefined = spreferences.contains("spusername");
于 2012-12-27T12:49:35.087 に答える
2

メソッド "spreferences.getString("spusername", eusername);" nullであるeusernameとしてデフォルト値を返しています。したがって、ヌルポインタ例外が発生しています。

eusername の代わりに、以下のように文字列値を指定して試すことができます。

spreferences.getString("spusername", "");

于 2012-12-27T12:49:27.890 に答える
1

次のように試してください:

spusername=spreferences.getString("spusername", "");

キーが SharedPreferences に見つからない場合は spusername のデフォルト値を追加し、次のように空または null をチェックします。

spusername=spreferences.getString("spusername", "");

if(!spusername.equals("")){   
     Log.e("Spusername != null","-->"+spusername);
}else{
      // do some code here
}
于 2012-12-27T12:46:42.110 に答える
1

デフォルト値を初期化しなかったからです。

String eusername;

これにより、共有設定に値を保存しない限り、常に null が返されます。空の文字列で初期化するだけ

String eusername = "";
于 2012-12-27T12:47:08.287 に答える
1

この変数を初期化せずに与えているeusernameため、ヌルポインター例外が発生するので、このようにしてみてください

spusername = preferences.getString("spusername", "n/a");

if(spusername!= null && !spusername.equals(""))
    {   
        Log.e("Spusername != null","-->"+spusername);

    }
   else{
               // your code is here
    }
于 2012-12-27T12:45:28.197 に答える