Самый эффективный способ хранения строк в Android

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

i.e.

String_A[1],
String_B[1],
String_C[1],
String_D[1],
String_E[1],

Все это атрибуты одного и того же объекта (который на самом деле не является объектом).


Теперь я хочу сохранить их, чтобы иметь возможность использовать их в новом действии, которое я создаю. Поскольку вы не можете передавать объекты, я подумал, что должен сохранить их в общих настройках.

Мой вопрос: следует ли мне сохранить их как отдельные строки или создать новый класс со всеми этими полями, а затем сериализовать объекты?

Каков наилучший способ с точки зрения использования памяти? На самом деле, есть ли другой способ добиться аналогичной функциональности?

Заранее спасибо Майк


person mixkat    schedule 06.02.2011    source источник


Ответы (3)


Если каждый из этих строковых массивов «достаточно большой», и кажется, что вы хотите их сохранить, рассматривали ли вы Sqlite? SharedPreferences наиболее эффективен для хранения примитивных данных в парах ключ-значение. Проверьте эту ссылку — там есть четкое сравнение имеющихся у вас вариантов — http://developer.android.com/guide/topics/data/data-storage.html

person Abhi    schedule 06.02.2011
comment
Да, только что узнал, что сериализованные объекты довольно велики для хранения в SharedPreferences... Мне придется использовать БД... спасибо за ответ... - person mixkat; 06.02.2011
comment
Да, извините, забыл это сделать :) - person mixkat; 07.02.2011

Вы можете передавать объекты через намерение. Дополнительная функция намерения может хранить пакет и отправлять его указанным действиям, однако они не могут быть вызваны в любое время (например, из более позднего действия без явной отправки). Если это одноразовый переход к другой деятельности, вы, вероятно, захотите его использовать.

http://developer.android.com/reference/android/content/Intent.html#putExtras%28android.content.Intent%29

Вот пример из тестового приложения, которое я сделал некоторое время назад:

public void onClick(View v) {
            switch(v.getId()) { //this references the unique ID of the view that was clicked
                case R.id.Button01: //this is what happens when the Button in the XML with android:id="@+id/Button01" is clicked
            Intent nameGreet = new Intent(this, MainMenu.class);//creates Intent which will send the EditText input
                    String theName = firstName.getText().toString();// creates a new string named "theName" which is the text from an EditText called "firstName"
                    nameGreet.putExtra("helloName", theName);//puts the input from EditText into the Intent, this is a key/value pair
                    this.startActivity(nameGreet);//setting off the Intent
                    break;

Затем вы поймаете это так:

@Override
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState);
    this.setContentView(R.layout.main_menu);
    String personsname = this.getIntent().getStringExtra("helloName");
    welcome = (TextView)this.findViewById(R.id.TextView01);
    welcome.setText(personsname);

Надеюсь это поможет.

person JMRboosties    schedule 06.02.2011
comment
О нет, я знаю, что вы можете передавать примитивные данные... Я говорил о реальном объекте... в любом случае спасибо за ответ... - person mixkat; 06.02.2011
comment
О, моя ошибка. Вам нужна помощь с SQLite? - person JMRboosties; 06.02.2011
comment
Вы можете передавать реальные объекты — они должны быть Parcelable или Serializable. - person Heiko Rupp; 07.02.2011
comment
@Heiko Rupp На самом деле это хороший момент ... сериализация объекта, передача его в новую активность и его десериализация ... не нужно ничего хранить ... жаль, что я не видел ваш комментарий раньше .... :) - person mixkat; 07.02.2011

Вы можете передать Serializable, используя Intent.

Intent.putExtra(String name, Serializable value).

person techiServices    schedule 06.02.2011