Из этого урока вы научитесь сохранять настройки с помощью SharedPreferences для android, мы рассмотрим создание простого приложения для android, позволяющее вводить, сохранять и загружать текст или цифры в поле ввода.

Создание проекта

В android studio создадим новый проект, назовём его - My Preferences(мои настройки). Нажмем Next, на следующей вкладке тоже нажмем Next. Выберем Empty Activity, Next, сократим название Layout Name до main. Нажмем финиш. Откроем файл main.xml, удалим Hello Word, из категории Layout добавим RelativeLayout. Добавим EditText, в него будем вносить наши данные. Так же добавим еще одну RelativeLayout, ниже EditText. Из категории Widgets добавим несколько кнопок(Button) на нашу RelativeLayout, и расположим их ниже EditText.

<RelativeLayout
        android:layout_width="395dp"
        android:layout_height="587dp"
        android:orientation="horizontal"
        tools:layout_editor_absoluteX="8dp"
        tools:layout_editor_absoluteY="8dp">


        <EditText
            android:id="@+id/editText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:ems="10"
            android:inputType="textPersonName"
            android:text="" />
        <requestFocus></requestFocus>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="43dp"
            android:orientation="horizontal"
            android:layout_below="@+id/editText"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_marginTop="53dp"
            android:layout_alignParentRight="true"
            android:layout_alignParentEnd="true">


            <Button
                android:id="@+id/button2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="0.35"
                android:text="@string/btnSave" />

            <Button
                android:id="@+id/button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="0.35"
                android:text="@string/btnLoad" />
        </LinearLayout>

</RelativeLayout>

Строковые переменные

Добавим вторую кнопку, сохранимся. Перейдем в текстовую версию файла main.xml, уберем в EditText значение Name(Android:text="Name"). В файле Strings.xml добавим несколько строковых переменных, btnSave, для первой кнопки со значением Save(Сохранить). Добавим вторую переменную для кнопки btnLoad(Загрузить), значение соответственно Load. Закроем String.xml.

<string name="btnSave">btnSave</string>
<string name="btnLoad">btnLoad</string>

Для текста кнопки присвоим через @string/btnSave значение для кнопки SAVE. Проделаем то же самое для второй кнопки, @string/btnLoad. Как видите, название на кнопках изменилось, сохранимся.

Используем SharedPreferences для android

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

 Используем SharedPreferences для android

Код программы

Перейдем в файл MainActivity, добавим наследование для MainActivity от функции OnClickListener, обработчик нажатия на кнопку. Добавим переменную edText от EditText, добавим кнопки Button - mySave и myLoad, SharedPreferences добавим так же mySP. Добавим строковую переменную final SAVE_TEXT, присвоим ей значение - "save text".

EditText edText;
Button mySave,myLoad;
SharedPreferences mySP;
final String SAVE_TEXT = "save text";

Переменной edText присвоим наш EditText который найдем через  findViewById R.id. название нашего EditText, который указан в файле main.xml. Найдем так же кнопку mySave тип Button через findViewById(R.id. название нашей кнопки button). Для кнопки mySave напишем обработчик нажатия на кнопку setOnClickListener. Он(код) будет располагаться немного ниже. Так же найдем кнопку myLoad тип Button findViewById R.id.button2. myLoad.setOnClickListener(this).

edText = (EditText)findViewById(R.id.editText);
mySave = (Button)findViewById(R.id.button2);
mySave.setOnClickListener(this);

myLoad = (Button)findViewById(R.id.button);
myLoad.setOnClickListener(this);

Функция нажатия на кнопки

За процедурой OnCreate создадим публичную, пустую функцию onClick, тип View переменная v. Конструктор switch - в него поместим переменную v.getId(), она будет получать Id нажатия на кнопку. Конструкция case R.id.button, будет запускаться   функция savePref(), сохранение Preferences, настроек, свойств. Конструкция break, case R.id.button2. При нажатии на эту кнопку будет срабатывать функция loadPref(), которую мы напишем ниже, break, default - значение по умолчанию, break.

public void  onClick(View v){
            switch (v.getId()){
                case R.id.button2:
                    savePref();
                    break;
                case  R.id.button:
                    loadPref();
                    break;
                default:
                    break;
            }
        }

Функция savePref()

Под функцией onClick напишем нашу функцию savePref(), тип void она не возвращает никакого значения. Так же сделаем заголовок-заготовку для loadPref(). В переменную mySP через конструкцию getPreferences(MODE_PRIVATE) присвоим значение свойств, напишем следующий код SharedPreferences.Editor в переменную ed присвоим ее mySP.edit() - возможность редактирования настроек. Ed.putString передадим текстовое значение  SAVE_TEXT который у нас равен "save text", пока он будет использоваться как болванка, в этой переменной хранится некоторое значение, которое мы будем заменять на то значение, которое у нас находится в переменной edText, а вернее то, что  мы напишем в поле для ввода. Преобразуем его в строку, commit() означает выполнить.

Так же добавим Toast - всплывающее сообщение, Toast.makeText(this, )добавим техт "Text save", длительность Toast.LENGTH_SHORT. show() - показать. С первой функцией мы закончили.

void savePref(){
 mySP = getPreferences(MODE_PRIVATE);
 SharedPreferences.Editor ed=mySP.edit();
 ed.putString(SAVE_TEXT,edText.getText().toString());
 ed.commit();
 Toast.makeText(this, "Text Save", Toast.LENGTH_SHORT).show();
}

Функция loadPref()

Для пустой функции loadPref() в переменную mySp опять получим getPreferences() с таким же MODE_PRIVATE, тип доступа. В переменную saveText тип string мы присвоим mySP текст SAVE_TEXT с пустым значением  edText.setText(saveText). Снова выведем Toast.makeText(this) наш текст - "Text load", текст загружен. укажем длительность Toast.LENGTH_SHORT - продолжительность короткая. show().

void loadPref(){
 mySP = getPreferences(MODE_PRIVATE);
 String saveText = mySP.getString(SAVE_TEXT,"");
 edText.setText(saveText);
 Toast.makeText(this, "Text Load", Toast.LENGTH_SHORT).show();
}

Тест в эмуляторе Android Studio

Запустим в эмуляторе наше приложение и проверим, как оно работает. Приложение запустилось, наберем произвольный текст, например test text, нажмем кнопку save, текст сохранен. Закроем наше приложение и запустим его из установленного в эмуляторе.

Используем SharedPreferences для android

Нажмем кнопку load и текст загружен. Все работает нормально. Удалим наш текст и напишем  что-нибудь более осмысленное, Например, privet mir. Нажмем кнопку SAVE, текст сохранен, очистим поле для ввода закроем наше приложение, запустим его снова, нажмем кнопку LOAD, наш текст снова отобразился на экране.

Используем SharedPreferences для android

Полный текст main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
	xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="ru.maxfad.mypreferences.MainActivity">

    <RelativeLayout
        android:layout_width="395dp"
        android:layout_height="587dp"
        android:orientation="horizontal"
        tools:layout_editor_absoluteX="8dp"
        tools:layout_editor_absoluteY="8dp">


        <EditText
            android:id="@+id/editText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:ems="10"
            android:inputType="textPersonName"
            android:text="" />
        <requestFocus></requestFocus>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="43dp"
            android:orientation="horizontal"
            android:layout_below="@+id/editText"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_marginTop="53dp"
            android:layout_alignParentRight="true"
            android:layout_alignParentEnd="true">


            <Button
                android:id="@+id/button2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="0.35"
                android:text="@string/btnSave" />

            <Button
                android:id="@+id/button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="0.35"
                android:text="@string/btnLoad" />
        </LinearLayout>
    </RelativeLayout>
</android.support.constraint.ConstraintLayout>

Полный текст MainActivity.java

package ru.maxfad.mypreferences;

import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    EditText edText;
    Button mySave,myLoad;

    SharedPreferences mySP;
    final String SAVE_TEXT = "save text";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        edText = (EditText)findViewById(R.id.editText);

        mySave = (Button)findViewById(R.id.button2);
        mySave.setOnClickListener(this);


        myLoad = (Button)findViewById(R.id.button);
        myLoad.setOnClickListener(this);

        }


        public void  onClick(View v){
            switch (v.getId()){
                case R.id.button2:
                    savePref();
                    break;
                case  R.id.button:
                    loadPref();
                    break;
                default:
                    break;
            }
        }

        void savePref(){
            mySP = getPreferences(MODE_PRIVATE);
            SharedPreferences.Editor ed=mySP.edit();
            ed.putString(SAVE_TEXT,edText.getText().toString());
            ed.commit();
            Toast.makeText(this, "Text Save", Toast.LENGTH_SHORT).show();
        }
        void loadPref(){
            mySP = getPreferences(MODE_PRIVATE);
            String saveText = mySP.getString(SAVE_TEXT,"");
            edText.setText(saveText);
            Toast.makeText(this, "Text Load", Toast.LENGTH_SHORT).show();
        }
}

В этом видео показано использование SharedPreferences для android:

Рекомендуем смотреть видео в полноэкранном режиме, в настойках качества выбирайте 1080 HD, не забывайте подписываться на канал в YouTube, там Вы найдете много интересного видео, которое выходит достаточно часто. Приятного просмотра!

 С уважением, авторы сайта Компьютерапия




Понравилась статья? Поделитесь ею с друзьями и напишите отзыв в комментариях!

Новые статьи

We use cookies on our website. Some of them are essential for the operation of the site, while others help us to improve this site and the user experience (tracking cookies). You can decide for yourself whether you want to allow cookies or not. Please note that if you reject them, you may not be able to use all the functionalities of the site.

Ok