gpt4 book ai didi

java - (Android java, JSON) 为什么会丢失存储值?

转载 作者:行者123 更新时间:2023-11-29 02:25:41 24 4
gpt4 key购买 nike

我有一个名为 JSONParser 的类,它可以找到我需要的所有必要信息。我制作了一个 ArrayList 变量,并按要求填充数据。但是...如果我尝试从其他 Activity 中获取此 ArrayList,它不会返回任何值...

public class JSONParser {
ArrayList<Day> days = new ArrayList<>();

public JSONParser() {
new getAllURLs().execute("https://...");
}

public ArrayList<Day> getDays() {
return days;
}

public void writeout() {
for (Day i : days) Log.e("Writeout", i.getDate());
}
}

例如,如果我从一个也在这个 JSONParser 类中的函数调用 writeout() 函数,它会完美地工作,我必须在 Logcat 中获取所有日期。但是如果我在主要 Activity 中尝试这样做:

    JSONParser jsonParser = new JSONParser();
jsonParser.writeout();

它不执行任何操作...不在 Logcat 中写入任何内容。如果我输入这个

jsonParser.writeout();

在主 Activity 中,一个简单的

writeout();

在我解析 json 文件并在代码中运行应用程序的 Activity 中,我只获得一次日期...

也许有人知道这是为什么?

最佳答案

因此,无论何时调用 JSONParser jsonParser = new JSONParser();,您都在创建一个具有自己的数组列表(其中可能没有您的 URL)的全新对象。您想要的是所有类都可以共享的单个对象。一种简单而常用的方法是使用单例模式。

https://www.javaworld.com/article/2073352/core-java/core-java-simply-singleton.html

public class JSONParser {
private static JSONParser instance;

private ArrayList<Day> days = new ArrayList<>();

public static JSONParser getInstance(){
if (instance == null){
instance = new JSONParser();
}
return instance;
}

private JSONParser() {
new getAllURLs().execute("https://...");
}

public ArrayList<Day> getDays() {
return days;
}

public void writeout() {
for (Day i : days) Log.e("Writeout", i.getDate());
}
}

现在,每次需要使用它而不是 new JSONParser() 时,您将调用 JSONParser.getInstance();,您将获得一个实例类。

一定要小心,不要让多个类同时对数组列表进行写入!或者一个人写,另一个人读。这可能导致竞争条件。

关于java - (Android java, JSON) 为什么会丢失存储值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52393133/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com