3

在我的登录和注销功能应用程序中,我正在检查活动开始时共享首选项是否为空,但我仍然收到 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

contains在 SharedPreferences 上有方法。

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

方法 "spreferences.getString("spusername", eusername);" 将默认值作为 eusername 返回为空。因此它给出了空指针异常。

取而代之的是 eusername,您可以尝试如下给出一些字符串值。

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

于 2012-12-27T12:49:27.890 回答
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 回答
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

首先确保您将一些数据保存到 Sharedpreferences 中,如下所示:

SharedPreferences.Editor preferences = getSharedPreferences(SETTINGS, MODE_PRIVATE).edit();
preferences.putString("appVersion", "1.0");
preferences.putString("appAuthor", "John Doe");
preferences.putString("authorEmail", "test@gmail.com");
preferences.apply();
preferences.commit();

然后你需要像这样初始化 SharedPreferences:

SharedPreferences preferences = getSharedPreferences(SETTINGS, MODE_PRIVATE);

然后您可以使用getAll()方法获取可用的 Sharedpreferences 数组,然后contains根据您的条件使用该方法执行一些逻辑。这是我记录所有可用首选项的方法:

Log.d("AVAILABLE_PREFS", String.valueOf(preferences.getAll()));

然后我可以根据得到的结果创建一个条件:

if (preferences.contains("appVersion")) {

    if(preferences.getString("appVersion", SETTINGS).equals("1.0")){
         // Do something if TRUE
    }

} else {
   // Do something here if no Preferences found.
}

于 2020-09-25T13:10:39.473 回答