2013-03-28 3 views
0

Мне нужно получить некоторые внешние данные. Короче говоря - это строковый массив для поля автозаполнения. Я сделал это с AsyncTask в моем Activity. Все отлично работает, я просто получить файл с внешнего сервера, поместите его в массив строк и прикрепить к моему автозаполнения поля:Лучший способ получить небольшие внешние данные 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

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

вы можете создать класс и назвать это что-то вроде DataStorage и внутри этого класса добавить статический объект ArrayAdapter

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

и из любого места в вашем коде каждый раз, когда вы хотите загрузить этот адаптер:

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

Это называется Singleton pattern, вы можете узнать об этом подробнее: Singleton Wiki

+0

Спасибо, я только что внедрил его, и он работает – Dawid

1

Вы можете получить эти данные один раз, а затем сохранить их в своем классе Application вашего приложения. поэтому при следующем включении этого Activity проверьте сначала, если массив в вашем приложении класс не пуст и не запускает AsyncTask.

Чтобы добавить класс приложений к приложению сделать это:

1. создать класс, расширяющий приложение, как это:

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 он другой класс активности в вашем приложении.

Документация:http://developer.android.com/reference/android/app/Application.html

Смежные вопросы