安卓: 在闪屏界面期间后台加载数据并在后续使用它

3

我正在尝试在应用程序启动时从Web服务器加载数据(获取一个JSONArray)。到目前为止,我只能使用以下命令从主活动中获取数组:

if (DEVELOPER_MODE) {
    StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
        .detectDiskReads()
        .detectDiskWrites()
        .detectNetwork()
        .penaltyLog()
        .build());<br>
}

jsonArray = JsonParser.getJSONFromURL("cities2.php");

这让我得到了当前类中的所有城市(或者其他需要的数据),但这不是一种干净的方法。我的问题是,如何从我的 SplashScreen Activity 中获取城市数据并在需要数据的 Activity 中使用它。我的目标是在 SplashScreen(大约4500行文本,约50KB数据)期间从 web 服务器加载所有数据,并在不同的 Activities 中使用它们。
所以,我目前的主要问题是如何将我在 SplashScreen 中加载的数据从 web 服务器传递到“最终” Activity(即 SplashScreen -> MainActivity -> SetFilterActivity -> ShowDataActivity(这里需要数据))。
我在这里阅读过:Android SplashScreen, 这里:How to make a splash screen (screen visible when app starts)? 这里:http://www.androidpeople.com/android-loading-welcome-splash-spash-screen-example 以及这里:http://www.41post.com/4588/programming/android-coding-a-loading-screen-part-1 以及其他来源。
我还尝试编写一个扩展 Application 的单独类,在其中“存储”数据(获取器和设置器),但某种方式它不像我想要的那样工作。
有人能指导我如何用适当的方法完成这项工作吗?
谢谢你的帮助。
PS:我可以在每个屏幕上轻松加载需要的数据,但我想在一个点上加载它,并在程序中随时随地使用它。
3个回答

3

另一种选择是使用两个不同的视图。在onCreate中加载一个视图,然后在其完成时加载另一个视图。但这绝对是正确的-用于覆盖数据加载的启动屏幕不应该是自己的活动。 - Gabe Sechan
嗨,@Alan,谢谢你提供的链接。我想我会使用描述来解决这个问题。 - Dan Stef
谢谢你,@Alan,很合乎逻辑。 - user3307005

0

将您累积的数据作为共享首选项加载。然后,您可以从应用程序的任何地方以键/值对的形式访问它们。

参见:http://developer.android.com/guide/topics/ui/settings.html

// Writing prefs

SharedPreferences.Editor editor = preferences.edit();

editor.putInt(defaultInt, currentInt);
editor.putFloat(defaultFloat, currentFloat);
editor.putString(defaultString, currentString);

// Reading prefs

currentString = this.getResources().getString("my_string_value");
currentFloat = this.getResources().getFloat("my_float_value");

使用SharedPreferences比扩展Application的开销要小得多——它将更快,更容易维护,特别是对于50kb的数据来说,这是一个相当微不足道的数量。


谢谢MarsAtomic,我会在另一个问题上使用共享首选项 :-)。现在我将使用@Alan的解决方案。感谢您的帮助。 - Dan Stef

0
使用数据库来存储和放置您的数据。数据库与活动无关,因此一旦您将数据存储在那里,您可以从任何地方检索它,基本上这就是数据库的作用-保留您的数据 :) 建议使用共享首选项并不是很好,因为它基本上是键值存储。如果您需要进行任何排序或条件数据提取,则会发现自己在重新发明轮子。

一个数据库似乎为仅有50kb的数据而言工作量很大。我也不想永久存储这些数据。一些数据每隔几天就会更改,因此它们需要在每次应用程序启动时从Web服务器加载。谢谢你的帮助! - Dan Stef
不,这并不是很麻烦的工作。它很容易,你不喜欢这个想法的唯一原因是你不熟悉它。但它很简单。先阅读任何数据库教程,然后以正确的方式完成你的应用程序。 - Marcin Orlowski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接