2013-03-28 37 views
0

我必须获取一些外部数据。长话短说 - 这是一个自动填充字段的字符串数组。我在Activity中用AsyncTask做了它。一切正常,我只是得到来自外部服务器上的文件,把它变成一个String数组,重视我的自动完成场:Android获取小型外部数据的最佳方式

ArrayAdapter<String> adapter = new ArrayAdapter<String>(
    SearchActivity.this, android.R.layout.select_dialog_item, 
    result); 
AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.editCity); 
textView.setAdapter(adapter); 

的问题是我每次去具体Activity时间我这样做。每次启动AsyncTask时,它有时会使我的应用程序变慢一点。什么是更好的方式来获取数据只有一次,然后保持整个应用程序生命周期?

回答

2

您可以随时使用您的数据的静态引用,这样你将确保只要VM运行它会呆在那里。

,你可以创建一个类,并调用它像DataStorage和类中添加静态ArrayAdapter对象

public class DataStorage{ 
    public static ArrayAdapter<String> sharedData; 
} 

,并在你的代码的任何地方,只要你想加载适配器:

if (DataStorage.sharedData == null){ 
    // write code to set sharedData 
} 

这就是所谓的Singleton模式,你可以在这里阅读更多关于它:Singleton Wiki

+0

谢谢,我刚刚实现它,它的工作原理 – Dawid

1

您可以获取此数据一次,然后将其存储在您的应用的Application类中。 所以下一次你打开这个Activity首先检查你的应用程序 类中的数组是否为空并且不运行AsyncTask

要将应用程序类添加到您的应用程序做到这一点:

创建扩展应用程序像这样一类:

public class YourApplicationClass extends Application 
{ 
    .... 
} 

2.并在manifast把它定义为您的应用程序类是这样的:

<application 
    android:allowBackup="true" 
    android:name=".YourApplicationClass" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen" > 
    ....  

此类对所有t他在你的应用程序中的其他Activity类。

文档:http://developer.android.com/reference/android/app/Application.html

相关问题