首页 > 解决方案 > 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)
    ...
}

但我不知道为什么会这样。我期待着能帮助我的人。

标签: androidkotlin

解决方案


如果您需要创建一个连接 ( MyHttpsClient) 并且您不查看已建立的连接,您可以为同一个连接创建多个实例,实际上,为同一个对象创建多个实例。

最好的方法是寻找单例模式,这是一个很好的模式来限制连接数和实例数。


推荐阅读