如何检查android中的共享首选项是否为空?

如何检查android中的共享首选项是否为空?,android,sharedpreferences,Android,Sharedpreferences,在我的用于登录和注销功能的应用程序中,当活动开始时,我正在检查共享首选项是否为null,但我仍然收到一个NullPointerException 以下是我的HomeActivity.java代码: // Username And Password Editbox String eusername; String epassword; // Shared Preferences String declaration String spusername; @Override public voi

在我的用于登录和注销功能的应用程序中,当活动开始时,我正在检查共享首选项是否为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);
    }
}

您在未初始化此变量的情况下给出了
eusername
,因此得到空指针异常 所以试着这样做

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

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

    }
   else{
               // your code is here
    }
试试看:

spusername=spreferences.getString("spusername", "");
如果在SharedReferences中找不到该键,请为spusername添加默认值,然后将其检查为Emply或null,如下所示:

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

if(!spusername.equals("")){   
     Log.e("Spusername != null","-->"+spusername);
}else{
      // do some code here
}

因为你没有初始化默认值

String eusername;
在未将任何值保存到共享首选项中之前,这将始终为空。 只是用空字符串初始化

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

相反,您可以通过如下方式提供一些字符串值进行尝试

getString(“spusername”,即“”)

您在SharedReference上有方法

boolean isSpUsernameDefined = spreferences.contains("spusername");

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

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 preferences = getSharedPreferences(SETTINGS, MODE_PRIVATE);
然后您需要初始化SharedReference,如下所示:

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 preferences = getSharedPreferences(SETTINGS, MODE_PRIVATE);
然后可以使用
getAll()
方法获取可用的SharedReference数组,然后使用
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.
}


您可以共享您的异常日志详细信息吗?该语句引发空指针异常?检查共享首选项是否为空您是否引用了为空的变量
spreferences
?现在空指针错误消失了,但如果spusername为空,而不是仍然输入if(!spusername.equals(“))){Log.e(“Spusername not null”、“-->”+Spusername);}在if(Spusername!=null){Log.e(“Spusername!=null”、“-->”+Spusername);if为null}。让我澄清一下spusername中是否有pref_字符串否当out活动启动时这是chek如果首选项为空,则显示我的用户名和密码编辑框,否则显示登录的注销按钮activity@AndroidNew:如果您删除最后一个if条件并使用else而不是if,则我认为您的问题是得到解决此代码将永远不会运行到if块(除非存储在prefs中的spusername是空字符串),因为spusername将是“n/a”或存储在SharedReferences.Balls中的spusername!我需要咖啡。。。很抱歉我又投了我的反对票——我在这里根本没有思考!我有罪。。。使用
contains
关键字检查实际钥匙是否在那里是个好主意…完成,先生!喝咖啡后感到精神振奋!:)