我试图在kotlin中的两个活动之间传递一个值,但如果我使用下面的代码,那么我只得到“Hello World”默认值,而不是PREFERENCE_NAME值。我的文本ID名称是android: id="@id/tv_count"感谢任何帮助。
Main Activity:
import android.content.Context
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val mypreference=MyPreference(this)
var loginCount=mypreference.getLoginName()
mypreference.setLoginName(loginCount)
tv_count.text=loginCount.toString()
}
}
My Preference:
import android.content.Context
class MyPreference(context:Context)
{
val PREFERENCE_NAME="SharedPreferenceExample"
val preference=context.getSharedPreferences(PREFERENCE_NAME,Context.MODE_PRIVATE)
fun getLoginName():String
{
return preference.getString(PREFERENCE_NAME,"Hello World")
}
fun setLoginName(name:String)
{
val editor=preference.edit()
editor.putString(PREFERENCE_NAME,name)
}
}
由于Kotlin中的委托属性,这将是一个更广泛的答案,展示了非常优雅地使用首选项的一般方法。这些使我们能够为日常用品提供自己的后备商店。
考虑这个描述如何读取和写入布尔值的类:
class BooleanPrefStore(val default: Boolean = false) {
operator fun getValue(thisRef: ContextWrapper?, property: KProperty<*>): Boolean =
PreferenceManager.getDefaultSharedPreferences(thisRef)
.getBoolean(property.name, default)
operator fun setValue(thisRef: ContextWrapper?, property: KProperty<*>, value: Boolean) {
PreferenceManager.getDefaultSharedPreferences(thisRef)
.edit()
.putBoolean(property.name, value)
.apply()
}
}
一个getter和setter,使用通常的方式从首选项读写。有了这个类,我们可以非常简洁优雅地设置属性:
var Property1: Boolean by BooleanPrefStore()
var Property2: Boolean by BooleanPrefStore(true)
它甚至允许我们提供一个默认值,如果它不同于“默认默认值”的话。如果需要的话,只需以同样的方式创建其他助手类即可,< code>IntPrefStore 、< code>LongPrefStore或< code>StringPrefStore。然后,您只需使用这些属性或给它们赋值,所有这些都将自动存储到首选项存储中,并从首选项存储中检索。
只有一个警告:首选项存储需要访问当前上下文。如果在保存上下文的活动
、片段
或类似的Android类中声明这些属性,则无需执行其他操作。所有这些类都实现了ContextWrapper
。但是如果您需要自己的类中的属性,您需要自己将其制作成一个<code>上下文包装器</code>例如:
class MyClass private constructor(context: Context) : ContextWrapper(context) {
...
只要在实例化时提供上下文即可。
您需要调用< code>commit,即
fun setLoginName(name:String)
{
val editor=preference.edit()
editor.putString(PREFERENCE_NAME,name)
editor.commit()
}
在您的情况下,您没有使用编辑器。commit()函数。这是全部代码
//Store in SharedPreference
val preference=getSharedPreferences(resources.getString(R.string.app_name), Context.MODE_PRIVATE)
val editor=preference.edit()
editor.putBoolean("isLoggedIn",true)
editor.putInt("id",1)
editor.putString("name","Alex")
editor.commit()
//Retrieve from SharedPreference
val name= preference.getString("name","")
val id= preference.getInt("id",0)
val isLoggedIn= preference.getBoolean("isLoggedIn",false)
我试图在Kotlin中创建一些功能测试,以使用Rest-Assured库向Cart Java服务发出请求。 因为我希望测试按程序进行,所以我希望能够存储第一个API请求的结果,并将其传递给下一个单元测试。 即 createCartTest()-- 从来没有真正使用过静态编程语言,所以寻找测试所有APIendpoint的最佳方法的建议。 还是在同一个函数中发出另一个请求并将结果传递给下一步更好? 跨
我有一个这样的旋转器: 当用户点击时,我希望它保存状态: 它将位置保存在SharedPref中,但微调器将返回默认值。有人看到什么了吗?
我试图用OkHttp和Cucumber在静态编程语言中设置一个Spring启动项目,并且在运行Cucumber任务时遇到以下错误。如何修复? 还有build gradle kts片段 我看到了这个错误https://github.com/square/okio/issues/647看起来可能是它,并修复了这个build.gradle,我如何将其翻译为kotlinbuild.gradle.kts?
如图所示,https://stackoverflow.com/a/16639438/8949356,在Java中,当声明的类是公共类时,可以重写其函数 但是我想知道如何用静态编程语言编写完全相同的代码,我已经尝试了很多,但没有找到任何关于这个主题的东西。我可以在Java中去做这件事,但我的其余代码是用静态编程语言编写的,而且我不能一直带着这种怀疑;静态编程语言对我来说是一个很好的工具,我想学习它。
经过大量研究,我最终决定在这里发布以下问题。对于大学项目,我想通过SharedReferences保存我的应用程序设置。然而,无论我做什么,它都不起作用。 对于一个简单的测试,我尝试在我的主要活动的oncreate方法中编写一些testdata,如下所示: 当我在调试模式下检查prefs对象时,它会向我显示应该创建文件的路径:/data/user/0//共享优先/测试。xml 然而,当我在手机上导
我有一个AmbassadorDAO,它有一个