我一直在测试一些样本天气应用程序代码项目,寻找3到5天的预测,可以在android studio中轻松编译。我找不到一个符合我理解水平的简单方法,但是可以帮助我。 (如果有人知道一个简单的最新天气预报应用程序,请在下方注明)
有问题的第一行。
if (getSharedPreferences(KEY_PREF, 0).getBoolean(KEY_PREF, true)
&& servicesConnected())
从:
private static final String KEY_PREF = "firstrun";
if (getSharedPreferences(KEY_PREF, 0).getBoolean(KEY_PREF, true)
&& servicesConnected()) {
if (getSharedPreferences(KEY_PREF, 0).getBoolean(KEY_PREF, true)
&& servicesConnected()) {
// get current city lat lon
buildGoogleApiClient();
mClient.connect();
CommonUtils.showToast("Retrieving your current location...");
// this will be done one time only
getSharedPreferences(KEY_PREF, 0).edit()
.putBoolean(KEY_PREF, false).apply();
} else if (savedInstanceState == null) {
if (DBHelper.getInstance().getCityCount() == 0) {
// called only if the cities array is empty too add a city
getSupportFragmentManager()
.beginTransaction()
.add(R.id.container, new AddCityFragment(),
AddCityFragment.class.getSimpleName()).commit();
} else {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new WeatherFragment()).commit();
}
}
}
boolean getBoolean(String key,boolean defValue)参数:(1)String key:要检索的首选项的名称。 (2)defValue boolean:如果此首选项不存在则返回的值。
我原来的问题是:
我在你们的帮助下推断出的解决方案:
我还发现了一个很酷的插件,适用于Android和Mac的Windows工作室,这比进入Android设备或虚拟设备并清除应用程序缓存更快。它被称为ADB idea并与CTRL + ALT + SHIFT +热键组合一起使用。
感谢大家!
SharedPreference只是一种存储一些小尺寸数据的方法。
1)如果它不存在,为什么它会返回true?
如果你愿意,可以让它返回false。这只是该密钥的默认值。您应该根据数据逻辑将default设置为true / false。对于他们的特定情况,为该键设置默认值true与他们的app逻辑一致。
例如,AFAIK android sdk没有向我们提供任何可以说应用程序第一次运行的api。因此,要知道如果应用程序第一次运行,您可以获取类似“is_first_run”的键的布尔值,并将默认值设置为true。如果应用程序是第一次运行,则此值不会存在于共享首选项中,因为您尚未设置它。所以,默认值true是有道理的。如果您发现它是真的,那么将其设置为false,以便下次运行应用程序时,它将返回false。如果清除缓存,则该值将再次为true,因为缓存已被销毁且变量不再存在。
2)对于SharedPreferences getSharedPreferences(String name,int mode)的问题是什么是操作模式0
操作模式0只是PRIVATE_MODE。开发人员应该使用变量而不是仅将其设置为零。它们是共享首选项的多种模式。您可以查看文档以获取更多信息。专用模式意味着此数据只能由此应用程序访问。
3)如何为getSharedPreferences添加监视(它存储在哪里?)
不确定你的意思adding a watch
。你在谈论sharedPreference上的事件监听器吗? AFAIK,你做不到。此外,共享首选项存储在应用程序的缓存目录中,该目录可以是/ data / app / appname / cache或其他东西(肯定是idk)
共享首选项存储数据,直到您删除并重新安装应用程序
getBoolean(“this is the key”,true);
如果getBoolean返回null,那么整个语句的计算结果为true
如果是getBoolean(“这是键”,则为false);
这意味着如果它返回null,则将其评估为false
Meaning why would it return true if it doesn't exist?
这是你的问题吧?
编码器的选择是将其设为真或假
首先当用户登录时你甚至没有触摸sharedPreferences,那么它可能会返回第二个参数
喜欢
if(SharedPreferences.getBoolean('isUserOld' , true)){
Toast.make( Context , "Welcome to Our App" , Long).show()
}
这里是检查用户是否旧了如果用户不老,那么如果块被执行,因为第二个参数返回true
这表明新用户已登录