Переменная Котлина инициализируется дважды - PullRequest
0 голосов
/ 23 ноября 2018

Это функция, которая получает объект в 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 голосов
/ 24 ноября 2018

Большое спасибо, что нашли время, чтобы проверить мой вопрос.Я посетил StackOverflow в первый раз.Наконец я узнал о своей проблеме и по ошибке инициализировал ее сверху.И я покажу полный код в следующий раз ..

private var instance : Login = Login()

class Login : AppCompatActivity(){

    override fun onCreate(savedInstanceState: Bundle?) {
0 голосов
/ 24 ноября 2018

Если вам нужно создать соединение (MyHttpsClient) и вы не смотрите на уже созданное соединение, вы можете создать несколько экземпляров для одного и того же соединения и, фактически, для одного и того же объекта.

Лучший способ - найти шаблон синглтона , который является хорошим шаблоном для ограничения числа соединений и, следовательно, количества экземпляров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...