2012-04-12 1 views
2

Я хочу сделать некоторые данные доступными между некоторыми видами деятельности, как это сделала бы корзина покупок на веб-сайте.Как хранить данные между действиями в android ?, корзина для покупок, как

Эти данные, вероятно, будут представлять собой набор строк, например, список, карту или что-то в этом роде. Каждый элемент должен ассоциировать идентификатор, количество, тип и текстовую заметку (о последней, еще не уверен)

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

Вопрос: Является лучшим выбором для использования SharedPreferences ?, базы данных?

Спасибо!

ответ

3

Даже лучшим выбором будет какая-то отдельная коллекция java (карта или список), расположенная через фабричный объект. Просто храните тележку там и не заморачиваться с базой данных или предпочтениями на всех

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

https://github.com/ko5tik/andject

+0

Обычно это решение я иду с в дополнение к хранению любого данные Я хочу быть уверенным, чтобы сохранить в базе данных или общих настройках. –

+0

Вы хотите создать класс с коллекцией пользовательских объектов? – giorgiline

+1

Вы могли бы это сделать, или вы могли бы просто сохранить свою коллекцию в объекте приложения (http://developer.android.com/reference/android/app/Application.html) –

0

Use Bundle или Intent.

Я бы не рекомендовал использовать базу данных для этой цели. База данных должна быть правильно открыта и закрыта. Там, где данные передаются по видам деятельности, он может стать беспорядочным, какой актив должен быть последним, чтобы закрыть базу данных и может вызвать утечку. Если вы просто передаете эти данные из одного Activity в другое, создайте Bundle, прикрепите его к Intent при запуске следующего действия.

0

SharedPreferences отлично подходит для хранения простых пар ключ/значение и небольших объемов данных, однако, я полагаю, что ваш объект (ы) корзины покупок может быть немного сложнее. По этой причине я, вероятно, использовал бы базу данных SQLite. Однако, если у вас нет сложных данных, и вы просто хотите сохранить некоторые простые вещи, то должны делать общие настройки.

+0

Да, я должен отказаться от общих настроек – giorgiline

0

SharedPreferences - это пары ключевого значения, тогда как база данных в Android - это SQLite, которая сохраняется после сеанса. Вы можете выполнять любое количество операций с базой данных SQLite и использовать тот же файл в течение следующего сеанса. Вы можете поместить комментарии к моим ответам, если вам нужны дополнительные разъяснения для вашего конкретного случая использования.

1

Самый простой способ - использовать класс с объявленными публичными статическими переменными и jus установить их из любой активности и получить это сохраненное значение в любой другой деятельности, просто вызвав статический refrence i.e MyContantsClass.StaticVar1 как

class MySessionVars 
{ 
     public static int MyVar1; 
} 

В первой деятельности

{ 
    MySessionVars.NyVar1=10; 
} 

и от любой другой деятельности

{ 
    Var = MySessionVars.NyVar1; 
} 

это самый простой способ, и сохранит вары недо приложение закрыто

0

Люди могут говорить о создании глобальных данных или сохранении значений в sharedpreference, но, согласно моему опыту, simp чтобы просто создать отдельный класс с вашими переменными или arraylists, объявленными как public static, а затем использовать их во всем своем проекте, просто обратившись к имени classname.variable. class global

{ 
    public static arrayList<String> my; 
} 

в любой вашей деятельности global.my

Это самый простой способ я нашел до сих пор!

1

Вы можете использовать Gson (от Google), чтобы отправлять и получать любые данные по биту активности, даже объект класса.


Отправить: (FirstActivity)

Intent intent = new Intent(FirstActivity.this, SecondActivity.class); 
Gson gson = new Gson(); 
intent.putExtra("CustomClassObject", gson.toJson(object)); 
startActivity(intent); 

Прием: (SecondActivity)

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_second); 
    Bundle extras = getIntent().getExtras(); 
    if (extras != null) 
    { 
     Gson gson = new Gson(); 
     CustomClass object = gson.fromJson(extras.getString("CustomClassObject"), CustomClass.class); 
    } 
    //... 
} 
Смежные вопросы