Android: как сохранить массив строк в SharedPreferences для Android

Я создаю приложение, которое ищет в Интернете с помощью поисковой системы. У меня есть один текст редактирования в моем приложении, из которого пользователь будет искать в Интернете. Я хочу сохранить ключевые слова для поиска, как это делает история браузера. Я могу сохранить и отобразить его с последним ключевым словом, но я не могу увеличить количество результатов поиска. Я хочу отобразить последние 5 поисков. Вот мой код:

public class MainActivity extends Activity implements OnClickListener {

Button insert;
EditText edt;
TextView txt1, txt2, txt3, txt4, txt5;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    edt = (EditText) findViewById(R.id.search_word);

    txt1 = (TextView) findViewById(R.id.txt1);
    txt1.setOnClickListener(this);

    insert = (Button) findViewById(R.id.insert);
    insert.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            if ((edt.getText().toString().equals(""))) {
                Toast.makeText(
                        getBaseContext(),
                        "Whoa! You haven't entered anything in the search box.",
                        Toast.LENGTH_SHORT).show();

            } else {
                SharedPreferences app_preferences = PreferenceManager
                        .getDefaultSharedPreferences(MainActivity.this);
                SharedPreferences.Editor editor = app_preferences.edit();
                String text = edt.getText().toString();
                editor.putString("key", text);
                editor.commit();
                Toast.makeText(getBaseContext(), text, Toast.LENGTH_LONG)
                        .show();
            }

        }
    });
}

@Override
protected void onStart() {
    // TODO Auto-generated method stub
    super.onStart();

    SharedPreferences app_preferences = PreferenceManager
            .getDefaultSharedPreferences(this);
    String text = app_preferences.getString("key", "null");
    txt1.setText(text);
}

public void onClick(View v) {
    String text = txt1.getText().toString();
    Toast.makeText(getBaseContext(), text, Toast.LENGTH_SHORT).show();

}

}

Пожалуйста, помогите мне в преодолении этой проблемы.


person Anupam    schedule 10.09.2012    source источник
comment
проверьте этот stackoverflow.com/questions/6761885/   -  person Ram kiran    schedule 10.09.2012
comment
Я видел эту штуку, но она мне не помогала, я не смог поставить из нее Strings.   -  person Anupam    schedule 10.09.2012
comment
Вы можете использовать gson для сохранения массива stackoverflow.com/a/22985657/1577792   -  person Sinan Kozak    schedule 28.11.2014


Ответы (2)


СОХРАНИТЬ МАССИВ

public boolean saveArray(String[] array, String arrayName, Context mContext) {   
    SharedPreferences prefs = mContext.getSharedPreferences("preferencename", 0);  
    SharedPreferences.Editor editor = prefs.edit();  
    editor.putInt(arrayName +"_size", array.length);  
    for(int i=0;i<array.length;i++)  
        editor.putString(arrayName + "_" + i, array[i]);  
    return editor.commit();  
} 

ЗАГРУЗИТЬ МАССИВ

public String[] loadArray(String arrayName, Context mContext) {  
    SharedPreferences prefs = mContext.getSharedPreferences("preferencename", 0);  
    int size = prefs.getInt(arrayName + "_size", 0);  
    String array[] = new String[size];  
    for(int i=0;i<size;i++)  
        array[i] = prefs.getString(arrayName + "_" + i, null);  
    return array;  
}
person Aditya Nikhade    schedule 10.09.2012
comment
Спасибо за это. Во-первых, для сохранения массива строк мне нужно поместить функцию SAVE ARRAY onClick() и LOAD ARRAY onStart(). Надеюсь, вы видели мой код, что я пытаюсь сделать. - person Anupam; 10.09.2012
comment
ты получил то, что хотел? или скажи мне, что именно ты хочешь сделать - person Aditya Nikhade; 10.09.2012
comment
onClick Я хочу хранить строки из текста редактирования одну за другой. И onStart() я должен отображать строки, которые я сохранил. - person Anupam; 10.09.2012
comment
поэтому просто используйте эти два метода в onCLick и onStart!! - person Aditya Nikhade; 10.09.2012
comment
Точно не подскажете как это сделать. Потому что я не умею этого делать. - person Anupam; 10.09.2012
comment
Можете ли вы сказать мне, как вызвать вышеупомянутую функцию на onClick()? - person Anupam; 10.09.2012
comment
замените тост вышеуказанным вызовом метода ... saveArray(//здесь имя вашего массива, имя, которое вы хотите сохранить,//контекст ЭТО); - person Aditya Nikhade; 10.09.2012
comment
Я не понимаю вас, не могли бы вы вставить сюда фиктивный код, чтобы я мог видеть, что я делаю неправильно. Спасибо. - person Anupam; 11.09.2012

Преобразуйте свой массив или объект в Json с библиотекой Gson и сохраните свои данные как строку в формате json.

Сохранять;

SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
Editor editor = sharedPrefs.edit();
Gson gson = new Gson();

String json = gson.toJson(arrayList);

editor.putString(TAG, json);
editor.commit();

Читать;

SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
Gson gson = new Gson();
String json = sharedPrefs.getString(TAG, null);
Type type = new TypeToken<ArrayList<ArrayObject>>() {}.getType();
ArrayList<ArrayObject> arrayList = gson.fromJson(json, type);

Исходный ответ: Сохранение объекта списка массивов в SharedPreferences

person Sinan Kozak    schedule 17.07.2017