我在Android / Java编程方面相当新,所以一些基本的东西仍然很混乱。因此,假设我的应用程序从外部XML文件获取所需的所有数据(文章),它将它们解析为数据模型(文章类),并且将在整个应用程序中使用这些文章(在列表或单个文章中显示)的生命周期。
我应该把它们放在哪里?我可以使用包含我已解析的所有文章的数组创建单例类吗?或者我应该将它们保存到数据库,然后按需查询? (这听起来像是太多的工作,我现在不需要缓存它们)这里最好的做法是什么?
答案 0 :(得分:2)
将它们保存在Application中。这是任何Android应用程序的基类,它在应用程序的整个生命周期中都处于活动状态,而活动在未显示或方向更改时被终止。
您必须在AndroidManifest.xml中声明android:name
:
<application android:name=".YourApplication"/>
<强>编辑:强>
这也是相关的:How do I pass data between Activities/Services within a single application?
答案 1 :(得分:1)
这取决于你的编程风格lol。
你可以像你说的那样创建一个能够读取xml并存储所有内容的单例。
您可以在班级中创建静态哈希。这样,当您创建新对象时,您将可以访问该类中的静态信息。
您可以将信息从类传递给类作为参数。
如果你想让我们告诉你哪一个会是最好的,那么在不了解你的程序架构的情况下会很难。
例如,您可以使用一个处理任何更改的视图控制器,然后在切换视图时将数据存储在该级别以便将其传递是很简单的。
您可以拥有静态视图,您可以在打开它们时直接设置所有值。
你可能会丢失链接的视图,这些视图在没有任何控制器的情况下相互调用来处理切换,在这种情况下,您可能更愿意从单例或静态方法中收集所需的信息......
答案 2 :(得分:0)
只要确保没有任何线程作用于共享数据,您就可以创建一个包含静态成员的静态类。每个活动都可以访问它。如果对数据使用异步下载,那么在处理程序的onPostExecute中,您可以触摸GlobeVars,因为它在UI线程上运行。
public class GlobalVars {
public static String userId = "?";
//public static String serverUrl = "10.0.2.2"; //localhost when developing
public static String serverUrl = "192.168.1.4"; //on device to laptop
//public static String serverUrl = "102.192.293.10"; //production
public static Book currentBook = null;
public static Chapter currentChapter = null;
public static int lastclickedChapter = -1;
public static Voice currentVoice = null;
public static String catalogJson = "";
public static ArrayList<Book> catalogItems = null;
}
onCreate of MainActivity我可以将目录设置为我下载的xml转换为对象的列表
GlobeVars.catalogItems = downloaded xml to object list
在我的SubActivity中,这是我可以设置的onclicklistener中的章节列表:
GlobeVars.currentChapter = items[clickeditem];
当您返回主活动时,仍会设置值。