Почему я не могу получить данные из массива синглтона, который я установил ранее? - PullRequest
0 голосов
/ 20 мая 2019

Я установил JsonArray в моем синглтоне:

try {
            obj.addProperty("filename", name)
            obj.addProperty("data", data)
            oldArray.add(obj)

            sn.array = oldArray

            getImages()
        } catch (e: JsonIOException) {
            e.printStackTrace()
        }

и затем я пытаюсь удалить элемент этого объекта из моего списка RV, но не могу получить какое-либо значение этого массива, потому что он пуст:

Singleton sn = new Singleton();
JsonArray array = sn.getArray();

if (Objects.requireNonNull(array).size() > 0) {
}

Я не могу понять, почему это происходит и как я решаю эту проблему. В синглтоне я вижу эти данные, но когда я пытаюсь их получить, я вижу, что массив полностью пуст. Почему это происходит и что я опять сделал не так? Возможно, у моего значения jsonArray неверное поле в моем синглтоне:

var array:JsonArray? = JsonArray()

надеюсь, что проблема проще, чем кажется мне:)

1 Ответ

1 голос
/ 20 мая 2019

Цель синглтона в том, что у вас есть только один экземпляр класса. В вашем случае вы создаете новый экземпляр класса singleton каждый раз, когда получаете к нему доступ. Очевидно, это выглядит как ноль. Вместо этого вы должны сделать что-то вроде этого:

class Singleton {
    public static final Singleton INSTANCE = new Singleton();

    // The rest of its members
}

И затем вы получаете доступ к нему через:

Singleton.INSTANCE

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

В Kotlin вы можете написать просто

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