編集済み 4 数か月前 によって ExtremeHow 編集チーム
Androidデータの保存接続性最適化設定スマートフォンヒントモバイルデバイスデータ管理ユーザーインターフェース
翻訳が更新されました 4 数か月前
Androidデバイスにデータを保存することは、モバイルアプリケーション開発の重要な部分です。この記事では、Androidデバイスにデータを保存するために使用されるさまざまな方法について包括的に理解できるようにします。データを保存する方法は多くあり、共有プリファレンス、内部ストレージ、外部ストレージ、SQLiteデータベースなどがあります。
各ストレージ方法の具体的な説明に入る前に、Androidでのデータストレージを導く一般原則を理解することが重要です。保存するデータの種類、このデータの必要な一貫性、データのプライバシーなどを考慮する必要があります。まず、Androidで使用できる主なデータストレージオプションを概説しましょう。
共有プリファレンスは、キーと値のペアとして小さなデータを保存するのに適しています。ユーザー設定やアプリケーションの設定を保存するためによく使用されます。AndroidアプリケーションでSharedPreferencesを使用する方法は以下の通りです:
getSharedPreferences()
メソッドを呼び出してSharedPreferencesのインスタンスを取得できます。このメソッドには、プリファレンスファイルの名前とモードという2つのパラメータが必要です。
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データベースを提供します。大規模または複雑なデータ構造に最適です。AndroidでSQLiteデータベースを作成し使用する方法を学びましょう:
データベースの作成やバージョン管理を管理するために、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はデータストレージのためのいくつかの方法を提供しており、特定のニーズに基づいて選択することができます。各方法の長所と制限を理解することで、アプリ開発中に実用的な決定を導くことができます。
記事の内容に誤りがある場合, あなたは