Отредактировано 4 несколько месяцев назад от ExtremeHow Редакционная команда
Андроид (Android)Сохранение данныхПодключениеОптимизацияНастройкиСмартфоныСоветыМобильные устройстваУправление даннымиПользовательский интерфейс
Перевод обновлен 4 несколько месяцев назад
Сохранение данных на устройстве Android является важной частью разработки мобильных приложений. Этот документ предоставит вам всестороннее понимание различных методов, используемых для сохранения данных на устройстве Android. Существует множество способов сохранения данных, включая общие настройки, внутреннее хранилище, внешнее хранилище, базы данных SQLite и другие.
Прежде чем переходить к деталям каждого метода хранения, важно понять общие принципы, которые лежат в основе хранения данных в Android. Вам нужно учитывать такие факторы, как тип данных, которые вы сохраняете, необходимая согласованность этих данных и конфиденциальность данных. Давайте сначала перечислим основные параметры хранения данных, доступные на Android:
Общие настройки подходят для хранения небольших объемов данных в виде пар "ключ-значение". Обычно они используются для сохранения пользовательских настроек или предпочтений приложения. Вот как вы можете использовать SharedPreferences в своем Android-приложении:
Вы можете получить экземпляр SharedPreferences, вызвав метод getSharedPreferences()
, который требует два параметра: имя файла настроек и режим.
SharedPreferences sharedPreferences = getSharedPreferences("MyPrefs", MODE_PRIVATE);
Чтобы сохранить данные в SharedPreferences, вам нужно использовать объект SharedPreferences.Editor
. Вот как это можно сделать:
SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putString("username", "john_doe"); editor.putInt("user_id", 12345); editor.apply();
Получение данных из общих настроек просто. Вы можете использовать методы getX()
, где X — это тип данных, который вы хотите получить:
String username = sharedPreferences.getString("username", "default_name"); int userId = sharedPreferences.getInt("user_id", 0);
Внутреннее хранилище используется для сохранения файлов, к которым может получить доступ только ваше приложение. Оно лучше всего подходит для приватных данных. Вот как вы можете работать с внутренним хранилищем:
Вы можете записать данные в файл, используя класс FileOutputStream
. Вот пример записи простого текстового файла:
String filename = "myfile.txt"; String fileContents = "Hello World!"; FileOutputStream fos = openFileOutput(filename, Context.MODE_PRIVATE); fos.write(fileContents.getBytes()); fos.close();
Чтобы прочитать файл из внутреннего хранилища, вам нужно использовать FileInputStream
:
FileInputStream fis = openFileInput(filename); InputStreamReader inputStreamReader = new InputStreamReader(fis); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); StringBuilder sb = new StringBuilder(); String line; while ((line = bufferedReader.readLine()) != null) { sb.append(line); } String fileContents = sb.toString();
Внешнее хранилище может быть съемным носителем, таким как SD-карта, или частью памяти устройства, доступной пользователю. Это полезно для больших файлов или файлов, доступных нескольким приложениям. Вот как вы можете использовать внешнее хранилище:
Перед использованием внешнего хранилища убедитесь, что ваш файл AndroidManifest.xml содержит необходимые разрешения:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Чтобы записать данные во внешнее хранилище, используйте класс File
для определения каталога и пути к файлу:
File externalStorageDir = Environment.getExternalStorageDirectory(); File myFile = new File(externalStorageDir, "myfile.txt"); FileOutputStream fos = new FileOutputStream(myFile); fos.write("Hello World!".getBytes()); fos.close();
Чтение файла из внешнего хранилища может быть выполнено с использованием FileInputStream
:
FileInputStream fis = new FileInputStream(myFile); InputStreamReader inputStreamReader = new InputStreamReader(fis); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); StringBuilder sb = new StringBuilder(); String line; while ((line = bufferedReader.readLine()) != null) { sb.append(line); } String fileContents = sb.toString();
SQLite является мощным вариантом хранения структурированных данных и предоставляет полную SQL-базу данных для хранения данных. Он идеально подходит для больших или сложных структур данных. Давайте узнаем, как создать и использовать базу данных SQLite в Android:
Вам нужно создать вспомогательный класс, наследующий SQLiteOpenHelper
, чтобы управлять созданием базы данных и управлением версиями:
public class MyDbHelper extends SQLiteOpenHelper { private static final int DATABASE_VERSION = 1; private static final String DATABASE_NAME = "mydatabase.db"; public MyDbHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS users"); onCreate(db); } }
Вы можете внести данные, используя ContentValues
:
MyDbHelper dbHelper = new MyDbHelper(getContext()); SQLiteDatabase db = dbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("name", "John Doe"); values.put("age", 29); long newRowId = db.insert("users", null, values);
Запрос данных выполняется с использованием методов query()
или rawQuery()
:
SQLiteDatabase db = dbHelper.getReadableDatabase(); Cursor cursor = db.query("users", new String[] {"id", "name", "age"}, null, null, null, null, null ); while(cursor.moveToNext()) { long userId = cursor.getLong(cursor.getColumnIndexOrThrow("id")); String userName = cursor.getString(cursor.getColumnIndexOrThrow("name")); int userAge = cursor.getInt(cursor.getColumnIndexOrThrow("age")); } cursor.close();
Room — это уровень абстракции над SQLite, который упрощает доступ к базе данных, позволяя вам писать запросы на Fluent API или полагаться на компиляторные диагностические средства SQL. Основные шаги таковы:
Определите сущность для представления таблицы с использованием аннотации @Entity
:
@Entity public class User { @PrimaryKey public int id; public String name; public int age; }
Вы определяете методы для доступа к базе данных через DAO:
@Dao public interface UserDao { @Insert void insertAll(User... users); @Query("SELECT * FROM user") List<User> getAll(); }
Создайте абстрактный класс, который наследуется от RoomDatabase
и содержит сущности и DAO:
@Database(entities = {User.class}, version = 1) public abstract class AppDatabase extends RoomDatabase { public abstract UserDao userDao(); }
Вы можете использовать определенную в вашем приложении базу данных следующим образом:
AppDatabase db = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "database-name").build(); UserDao userDao = db.userDao(); List<User> users = userDao.getAll();
В заключение, Android предлагает несколько методов для хранения данных, и вы можете выбрать их в зависимости от ваших конкретных потребностей. Понимание сильных и слабых сторон каждого метода поможет вам принимать практические решения в процессе разработки вашего приложения.
Если вы найдете что-то неправильное в содержании статьи, вы можете