『Android 1行目コード』first reading 9

10665 ワード

データ永続化とは、それらのメモリの瞬時データを記憶装置に保存し、携帯電話やパソコンの電源を切った場合でも、これらのデータが失われないことを保証することです.メモリに保存されたデータは瞬時状態であり、記憶装置に保存されたデータは永続状態であり、永続化技術は、瞬時状態と永続状態との間でデータを変換するメカニズムを提供する
ファイルストレージ
ファイルストレージプロセス:
  • 書き込み:openFileOutput(",Context.MODE_PRIVATE)メソッドを使用してFileOutput Streamを返します.このオブジェクトを取得すると、Javaストリームを使用してファイルにデータを書き込むことができます.
  • 読み:openFileInput(")メソッドを使用してFileInputStreamオブジェクトを方輝し、Javaストリームを介してデータを読み取ることができます.
  • public class MainActivity extends AppCompatActivity {
    //       ,     EditText  
        private EditText edit;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            edit = (EditText) findViewById(R.id.edit);
    //             
            String inputText = load();
            if (!TextUtils.isEmpty(inputText)){//           null      
                edit.setSelection(inputText.length());//        
                edit.setText(inputText);
            }
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            String inputText = edit.getText().toString();
    //         
            save(inputText);
        }
    
        public void save(String inputText){
            FileOutputStream out = null;
            BufferedWriter writer = null;
            try {
    //openFileOutput("data", Context.MODE_PRIVATE)           ,            :MODE_PRIVATE       ,MODE_APPEND       。
    //              /data/data//files/data
                out = openFileOutput("data", Context.MODE_PRIVATE);
    //java   
                writer = new BufferedWriter(new OutputStreamWriter(out));
                writer.write(inputText);
            }catch (IOException e){
                e.printStackTrace();
            }finally {
                try{
                    if (writer != null){
                        writer.close();
                    }
                }
                catch (IOException e){
                    e.printStackTrace();
                }
            }
        }
    
        public String load(){
            FileInputStream in = null;
            BufferedReader reader = null;
            StringBuilder content = new StringBuilder();
            try{
    //openFileInput("data"      "data",    
                in = openFileInput("data");
                reader = new BufferedReader(new InputStreamReader(in));
                String line = "";
    //reader.readLine()       ,              
                while ((line = reader.readLine())!= null){
                    content.append(line);
                }
            }catch (IOException e){
                e.printStackTrace();
            }
            return content.toString();
        }
    }
    

    SharedPreferences
    SharedPreferencesストレージプロセス:
  • SharedPrecencesオブジェクトの取得方法1:ContextクラスのgetSharedPreferences()メソッド2:ActivityクラスのgetPreference()メソッド3:PreferenceManagerクラスのgetDefultSharedPreferences()
  • SharedPreferencesオブジェクトのedit()メソッドを呼び出してSharedPrefencesを取得する.Editorオブジェクト
  • putXX()を使用してEditorオブジェクトにデータを追加するか、getXX()メソッドでデータ
  • を取得します.
  • データを追加するときのみ、apply()メソッドを呼び出して追加するデータをコミットし、データ格納動作
  • を完了する.
    //      ,        
    public class MainActivity extends AppCompatActivity implements View.OnClickListener{
        private String TAG = "MainActivity";
    
        private Button save_btn;
        private Button restore_btn;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            save_btn = (Button) findViewById(R.id.save_btn);
            restore_btn = (Button) findViewById(R.id.restore_data);
            save_btn.setOnClickListener(this);
            restore_btn.setOnClickListener(this);
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.save_btn:
    //getSharedPreferences("data",MODE_PRIVATE)    :
    //"data"    ,MODE_PRIVATE                   SharedPrefences      。
                    SharedPreferences.Editor editor = getSharedPreferences("data",MODE_PRIVATE).edit();
                    editor.putString("name","Tom");
                    editor.putInt("age",23);
                    editor.putBoolean("married",false);
                    editor.apply();
                    break;
                case R.id.restore_data:
                    SharedPreferences preferences = getSharedPreferences("data",MODE_PRIVATE);
                    String name = preferences.getString("name","data is bull");
                    int age = preferences.getInt("age",-1);
                    boolean married = preferences.getBoolean("married",false);
                    Log.d(TAG,"name is " + name);
                    Log.d(TAG, "age is " + age);
                    Log.d(TAG, "married is " + married);
                    break;
                default:
                    break;
            }
        }
    }
    

    SQLiteデータベースストレージ
    SQLiteはAndroidに内蔵されたデータベースです
  • SQLiteOpenHelperヘルプクラスを定義します(この例では、2つのメソッドgetReadableDatabase()getWritableDatabase()の2つのメソッドがデータベースを開くことができますが、データベースが書き込めない場合、getReadableDatabase()メソッドが返すオブジェクトは読み取り専用でデータベースを開き、getWritableDatabase()メソッドで異常が発生します)
  • .
  • ActivityでSQLiteOpenHelperオブジェクトをインスタンス化する
  • は、getReadableDatabase()またはgetWritableDatabase()メソッド
  • を呼び出す.
    //    SQLiteOpenHelper
    public class MyDatabaseHelper extends SQLiteOpenHelper{
    //SQL  
        public static final String CREATE_BOOK = "create table Book ("
                +"id integer primary key autoincrement, "
                +"author text, "
                +"price real, "
                +"pages integer, "
                +"name text)";
        public String DROP_BOOK = "drop table if exists Book";
        public String CREATE_CATEGORY = "create table Category ("
                +"id integer primary key autoincrement, "
                +"category_name text, "
                +"category_code integer)";
        public String DROP_CATEGORY = "drop table if exists Category";
    
        private Context mContext;
        public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
            super(context, name, factory, version);
            mContext = context;
        }
    
        @Override
        public void onCreate(SQLiteDatabase db) {
    //  SQL  ,   
            db.execSQL(CREATE_BOOK);
            db.execSQL(CREATE_CATEGORY);
            Toast.makeText(mContext,"Create succeeded",Toast.LENGTH_SHORT).show();
        }
    
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {//          
    //  SQL  ,   
            db.execSQL(DROP_BOOK);
            db.execSQL(DROP_CATEGORY);
            onCreate(db);
        }
    }
    
    //      5    button
    public class MainActivity extends AppCompatActivity {
    //  ButterKnife
        @BindView(R.id.create_database)
        Button createDatabase;
        @BindView(R.id.add_data)
        Button addData;
        @BindView(R.id.updata_data)
        Button updataData;
    
        private MyDatabaseHelper databaseHelper;
        private String TAG = "MainActivity";
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    //   MyDatabaseHelper     :
    //context;    ;                    Cursor,    null;        ,           
            databaseHelper = new MyDatabaseHelper(this,"BookStore.db",null,3);
            ButterKnife.bind(this);
        }
    
        @OnClick({R.id.create_database,R.id.add_data,R.id.updata_data,R.id.delete_data,R.id.select_data})
        public void onClick(View v){
            switch (v.getId()){
                case R.id.create_database:
                    databaseHelper.getWritableDatabase();
                    break;
                case R.id.add_data:
                    SQLiteDatabase db = databaseHelper.getWritableDatabase();
    //                  ContentValues      
                    ContentValues values = new ContentValues();
    //                         
                    values.put("name","The Da Vinci Code");
                    values.put("author","Dan Brown");
                    values.put("pages",454);
                    values.put("price",16.96);
                    db.insert("Book",null,values);//       
                    values.clear();
                    //         
                    values.put("name","The Lost Symbol");
                    values.put("author","Dan Brown");
                    values.put("pages",510);
                    values.put("price",19.95);
                    db.insert("Book",null,values);//       
                    break;
                case R.id.updata_data:
                    SQLiteDatabase dbUpdata = databaseHelper.getWritableDatabase();
                    ContentValues valuesUpdata = new ContentValues();
                    valuesUpdata.put("price",10.99);
                    dbUpdata.update("Book",valuesUpdata,"name = ?",new String[]{
                        "The Da Vinci Code"
                     });
                    break;
                case R.id.delete_data:
                    SQLiteDatabase dbDelete = databaseHelper.getWritableDatabase();
                    dbDelete.delete("Book","pages > ?", new String[]{"500"});
                    break;
                case R.id.select_data:
                    SQLiteDatabase dbSelect = databaseHelper.getWritableDatabase();
                    //  Book       
                    Cursor cursor = dbSelect.query("Book",null,null,null,null,null,null);
                    if (cursor.moveToFirst()){
                        do {
                            //  Cursor  ,       
                            String name = cursor.getString(cursor.getColumnIndex("name"));
                            String author = cursor.getString(cursor.getColumnIndex("author"));
                            int pages = cursor.getInt(cursor.getColumnIndex("pages"));
                            double price = cursor.getDouble(cursor.getColumnIndex("price"));
                            Log.d(TAG, "book name is " + name);
                            Log.d(TAG, "book author is " + author);
                            Log.d(TAG, "book price is " + price);
                        }while (cursor.moveToNext());
                    }
                    cursor.close();
                    break;
            }
        }
    }
    

    注意:データベースが一度作成されると、MyDatabaseHelperはonCreate()メソッドを再度呼び出すことはありません.これはupgrade()を呼び出す必要があります.バージョン番号が以前より大きくなれば更新できます.