Kotlin变量被初始化两次

时间:2018-11-23 12:00:05

标签: 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)
    ...
}

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

2 个答案:

答案 0 :(得分:0)

如果您需要创建一个圆锥形((".*?")|((?<group>\b([A-z*]+))-) ),而又不用看已经建立的连接,则可以为同一个圆锥形,实际上是同一个对象创建多个实例

最好的方法是寻找singleton pattern,这是限制连接数和实例数的好方法。

答案 1 :(得分:0)

非常感谢您抽出宝贵时间检查我的问题。我是第一次访问stackoverflow。最终我发现了我的问题,我在顶部错误地初始化了它。下次我将显示完整的代码。

private var instance : Login = Login()

class Login : AppCompatActivity(){

    override fun onCreate(savedInstanceState: Bundle?) {