android - Kotlin 变量被初始化两次
问题描述
这是在 MyHttpsClient.java 中获取对象的函数。
public static MyHttpsClient getClient(Context context, OnHttpsResult resultListener) throws Exception {
Log.i("TAG","---------------------------" + context.getClass().getName() + " getClient!--------------------------------");
for(String c : contextNames){
if(c == context.getClass().getName()){
throw new Exception("Can not be initialized twice in the same class");
}
}
contextNames.add(context.getClass().getName());
return new MyHttpsClient(context, resultListener);
}
我在 Login.kt 中像这样初始化它:
object MyHttpsListener : MyHttpsClient.OnHttpsResult{
override fun OnResult(jsonObject: JSONObject?) {
when(workid){
0 -> {
var status = jsonObject?.getInt("status")
if(status == 1){
instance.startActivity(Intent(instance, MainActivity::class.java))
}
else{
Toast.makeText(instance, "Incorrect email or password!", Toast.LENGTH_LONG).show()
}
instance.pb_login.visibility = View.GONE
}
}
}
}
var client = MyHttpsClient.getClient(this, MyHttpsListener)
运行应用程序后,我发现“客户端”调用了两次“getClient()”,因此应用程序崩溃了。最后,我以这种方式解决了这个问题:
lateinit var client: MyHttpsClient
而在 onCreate 中初始化的“客户端”
override fun onCreate(savedInstanceState: Bundle?) {
...
client = MyHttpsClient.getClient(this, MyHttpsListener)
...
}
但我不知道为什么会这样。我期待着能帮助我的人。
解决方案
如果您需要创建一个连接 ( MyHttpsClient
) 并且您不查看已建立的连接,您可以为同一个连接创建多个实例,实际上,为同一个对象创建多个实例。
最好的方法是寻找单例模式,这是一个很好的模式来限制连接数和实例数。
推荐阅读
- iis - 根据用户授权或请求 url 添加或删除响应头
- python - Flask SqlAlchemy 存储多个值
- linux - Julia 与 Linux 中的 VS Code 集成
- python - 输入一个 ASCII 文本文件/在 Python 中将每个字符转换为 ASCII 值
- python - mongodb pymongo转储范围内的文件然后删除,保证非转储的不被删除
- javascript - 在 Vue 中悬停时向元素添加类,而不使用数据
- ruby-on-rails - 为什么在使用 new/save 与 create 时没有在 rails 中创建 has_many 的连接表?
- javascript - 如何使用 forEach 循环检查多个 URLSearchParams
- powershell - 将文件移动到多个文件夹并使用 powershell 压缩
- sql - 在某些列中查找具有相同值的行