As’ad Djamalilleil http://kampusku.my.id asad.kom@gmail.com Data Storage As’ad Djamalilleil http://kampusku.my.id asad.kom@gmail.com
Jenis Storage Shared Preferences (key-value sets) Internal Storage External Storage (SD-card)
Shared Preferences SharedPreferences API dapat digunakan untuk menyimpan koleksi data yang relatif kecil dalam bentuk pasangan key-value Objek SharedPreferences menunjuk ke sebuah file yang berisi pasangan key-value dan menyediakan method untuk read-write Setiap SharedPreferences ditangani oleh framework dan dapat bersifat private atau shared
Membuat File SharedPreferences getSharedPreferences() Membuat beberapa file shared preferences dengan nama tertentu, dapat dipanggil lewat objek Context/Activity pada app yg dibuat getPreferences() Membuat hanya satu file shared preferences untuk activity tersebut, tanpa perlu memberikan nama file tersebut
Mengakses file shared preferences dengan nama file yang berada di resource string Context context = getActivity(); SharedPreferences sharedPref = context.getSharedPreferences( getString(R.string.preference_file_key), Context.MODE_PRIVATE ); Gunakan nama file yang unik, misalnya:"com.contoh.aplikasiku.NAMA_ FILENYA“
Contoh lain: SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); Bila menggunakan MODE_WORLD_READABLE atau MODE_WORLD_WRITEABLE, maka aplikasi lain dapat mengakses file tersebut lewat identifier file
Menulis ke Shared Preferences SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPref.edit(); //method edit() untuk mengaktifkan penulisan editor.putInt( getString(R.string.saved_high_score), newHighScore ); //method putInt() dan putString() untuk menulis data ke dalam file editor.commit(); //method commit untuk menyimpan
Membaca dari SharedPreferences SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); int defaultValue = getResources().getInteger( R.string.saved_high_score_default ); long highScore = sharedPref.getInt( getString(R.string.saved_high_score), defaultValue //method getInt() dan getString() untuk membaca data dari dalam file //nilai default diberikan bila data yang dibaca tidak ada
Internal Storage Selalu tersedia File yang tersimpan hanya dapat diakses lewat aplikasi yang kita buat Sistem akan menghapus seluruh file yang terkait dengan aplikasi tersebut apabila di-uninstall
External Storage Tidak selalu tersedia karena external storage dapat ditanggalkan File dapat dibaca diluar aplikasi yang kita buat File hanya dapat dihapus bila file tersebut disimpan pada directory yang didapat dari method getExternalFilesDir()
Izin Akses External Storage <manifest ...> <uses-permission android:name= "android.permission.WRITE_EXTERNAL_STORAGE" /> </manifest> READ_EXTERNAL_STORAGE permission digunakan untuk membaca saja WRITE_EXTERNAL_STORAGE permission secara implisit memiliki izin untuk membaca juga
Menyimpan Ke Internal Storage Ketika menyimpan file ke internal storage, kita dapat memperoleh directory yang tepat sebagai sebuah File dengan memanggil salah satu dari dua method berikut: getFilesDir() Memberikan sebuah objek File yg mewakili internal directory untuk aplikasi getCacheDir() Memberikan sebuah objek File yg mewakili internal directory yang bersifat sementara File tersebut dapat dihapus oleh sistem secara otomatis
String filename = "myfile"; String string = "Hello world String filename = "myfile"; String string = "Hello world!"; FileOutputStream outputStream; try { outputStream = openFileOutput( filename, Context.MODE_PRIVATE ); outputStream.write(string.getBytes()); outputStream.close(); } catch (Exception e) { e.printStackTrace(); }
public File getTempFile(Context context, String url) { File file; try { String fileName = Uri.parse(url).getLastPathSegment(); file = File.createTempFile( fileName, null, context.getCacheDir() ); } catch (IOException e) { //Error while creating file } return file; }
Menyimpan ke External Storage Dikarenakan external storage tidak selalu tersedia, maka harus selalu diverifikasi sebelum diakses getExternalStorageState() Memberikan nilai MEDIA_MOUNTED bila external storage tersedia
/. Checks if external storage is available for read and write /* Checks if external storage is available for read and write */ public boolean isExternalStorageWritable() { String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state)) { return true; } return false; } /* Checks if external storage is available to at least read */ public boolean isExternalStorageReadable() { String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state) || Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { return true; } return false; }