Penyimpanan presisten Android Eclipse

  • File berbasis persistence 

Android memungkinkan untuk menyimpan data aplikasi melalui sistem file. Dalam setiap aplikasi, sistem Android membuat direktori pada : data/data/[application package].


Android mendukung cara berikut untuk menyimpan data di sistem file lokal:
    • File =>  dapat membuat dan memperbarui file.
    • Preferensi => Android memungkinkan menyimpan dan mengambil pasangan nilai kunci persisten dari tipe data primitif.
    • Database SQLite - contoh database SQLite juga disimpan di sistem file lokal.
    • File disimpan di folder file dan pengaturan aplikasi disimpan sebagai file XML di folder shared_prefs.
    • Jika aplikasi membuat database SQLite, database ini disimpan di direktori aplikasi utama di bawah folder database.
Tangkapan layar berikut menunjukkan sistem file yang berisi file, file cache, dan preferensi.

 

Hanya aplikasi terkait yang dapat menulis ke direktori aplikasinya. Aplikasi itu dapat membuat sub-direktori tambahan di direktori aplikasi ini. Untuk sub-direktori ini, aplikasi dapat memberikan izin baca atau tulis untuk aplikasi lain.


Android memiliki penyimpanan internal dan penyimpanan eksternal. Penyimpanan eksternal tidak bersifat pribadi dan mungkin tidak selalu tersedia. Jika perangkat Android terhubung dengan komputer, komputer dapat memasang sistem eksternal melalui USB dan itu membuat penyimpanan eksternal ini tidak tersedia untuk aplikasi Android.


Pada level Android 8 SDK, dimungkinkan untuk menentukan bahwa aplikasi dapat atau harus ditempatkan pada penyimpanan eksternal. Untuk hal tersebut, setel Android:installLocation ke preferExternal atau auto.


Dalam hal ini, komponen aplikasi tertentu dapat disimpan pada titik pemasangan eksternal terenkripsi. Basis data dan data pribadi lainnya akan tetap disimpan di sistem penyimpanan internal.

  • Preferences 
    • Storing key-value pairs

Kelas SharedPreferences memungkinkan untuk mempertahankan pasangan nilai kunci dari tipe data primitif dalam sistem file Android. Kelas PreferenceManager menyediakan metode untuk mendapatkan akses ke preferensi ini. Kode berikut menunjukkan cara mengakses preferensi dari file tertentu.

# getting preferences from a specified file
SharedPreferences settings = getSharedPreferences("Test", Context.MODE_PRIVATE);

 

Preferensi harus dibuat pribadi untuk aplikasi. File prefernsi dapat diakses melalui semua komponen aplikasi. Penyimpanan default untuk preferensi dapat diakses melalui panggilan metode: PreferenceManager.getDefaultSharedPreferences(this). Nilai preferensi diakses melalui kunci dan instance kelas SharedPreferences, seperti yang ditunjukkan dalam daftar berikut: 

SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getActivity());
String url = settings.getString("url", "n/a");

 

Untuk membuat atau mengubah preferensi, Kita harus memanggil metode edit() pada objek SharedPreferences. Setelah Kita mengubah nilainya, Kita harus memanggil metode apply() untuk menerapkan perubahnnya secara asinkron ke sistem file. 

Editor edit = preferences.edit();
edit.putString("username", "new_value_for_user");
edit.apply();

Penggunaan metode commit() tidak disarankan, karena ia menulis perubahan secara sinkron ke sistem file.

    •   Preference Listener
Kita dapat mendengarkan perubahan preferensi melalui metode registerOnSharedPreferenceChangeListener() pada SharedPreferences.
SharedPreferences prefs =
    PreferenceManager.getDefaultSharedPreferences(this);
// Instance field for listener
listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
  public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
    // Your Implementation
  }
};
prefs.registerOnSharedPreferenceChangeListener(listener);
Satu hal yang harus diperhatikan adalah bahwa SharedPreferences menyimpan pendengar di WeakHashMap sehingga pendengar dapat didaur ulang jika kode Kita tidak memiliki referensi ke sana.
    •  User interface for preferences.
Android memungkinkan Kita membuat file sumber daya XML yang menjelaskan nilai kunci preferensi. Sebuah instance dari PreferenceActivity atau PreferenceFragment dapat menghasilkan antarmuka pengguna untuk file-file ini. Antarmuka pengguna menjaga agar pasangan nilai kunci tetap bertahan. Untuk membuat file sumber daya preferensi jenis XML.
Android menyediakan kelas PreferenceFragment yang menyederhanakan pembuatan antarmuka pengguna untuk mempertahankan nilai preferensi. Fragmen ini dapat memuat file definisi preferensi XML melalui metode addPreferencesFromResource().
  • LATIHAN
    • Android presistensi preference. 
1. Silahkan membuat proyek android baru dengan nama yang merepresentasikan judul latihan dan nama mahasiswa masing-masing.
2.  Buat tampilan layout (main_activity.xml)seperti berikut :
 

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/linLayout1Vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

<LinearLayout

android:id="@+id/linLayout2Horizontal"

android:layout_width="fill_parent"

android:layout_height="wrap_content" >

<Button

android:id="@+id/btnPrefSimple"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Pref1" />

<Button

android:id="@+id/btnPrefFancy"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Pref2"

/>

</LinearLayout>

<TextView

android:id="@+id/txtCaption1"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:background="#ff006666"

android:text="This" />

</LinearLayout>

 

3. Koding mainActivity.java seperti berikut : 


package com.example.presisten;

import android.os.Bundle;

import android.app.Activity;

import android.view.Menu;

import java.util.Date;

import android.content.SharedPreferences;

import android.graphics.Color;

import android.graphics.Typeface;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.TextView;

import android.widget.Toast;


public class MainActivity extends Activity implements OnClickListener{

Button btnSimplePref;

Button btnFancyPref;

TextView txtCaption1;

Boolean fancyPrefChosen = false;

View myLayout1Vertical;

final int mode = Activity.MODE_PRIVATE;

final String MYPREFS = "MyPreferences_001";

// create a reference to the shared MainActivity object

SharedPreferences mySharedPreferences;

// obtain an editor to add data to my SharedPreferences object

SharedPreferences.Editor myEditor;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

myLayout1Vertical = (View)

findViewById(R.id.linLayout1Vertical);

txtCaption1 = (TextView)

findViewById(R.id.txtCaption1);

txtCaption1.setText("This is a sample line \n"

+ "suggesting the way the UI looks \n"

+ "after you choose your preference");

// create a reference & editor for the shared preferences object

mySharedPreferences =

getSharedPreferences(MYPREFS, 0);

myEditor =

mySharedPreferences.edit();

// has a Preferences file been already created?

if (mySharedPreferences != null

&&

mySharedPreferences.contains("backColor")) {

// object and key found show all saved values

applySavedPreferences();

} else {

Toast.makeText(getApplicationContext(), "No Preferences found", 1)

.show();

}

btnSimplePref = (Button)

findViewById(R.id.btnPrefSimple);

btnSimplePref.setOnClickListener(this);

btnFancyPref = (Button)

findViewById(R.id.btnPrefFancy);

btnFancyPref.setOnClickListener(this);

}// onCreate



@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu);

return true;

}



@Override

public void onClick(View v) {

// TODO Auto-generated method stub

// clear all previous selections

myEditor.clear();

// what button has been clicked?

if (v.getId() ==

btnSimplePref.getId()) {

myEditor.putInt("backColor",

Color.BLACK);// black background

myEditor.putInt("textSize", 12); // humble small font

}

else { // case btnFancyPref

myEditor.putInt("backColor",

Color.BLUE); // fancy blue

myEditor.putInt("textSize",

20); // fancy big

myEditor.putString("textStyle",

"bold"); // fancy bold

myEditor.putInt("layoutColor",

Color.GREEN);// fancy green

}

myEditor.commit();

applySavedPreferences();

}

@Override

protected void onPause() {

// warning: activity is on its last state of visibility!.

// It's on the edge of been killed! Better save all current

// state data into Preference object (be quick!)

myEditor.putString("DateLastExecution", new

Date().toLocaleString());

myEditor.commit();

super.onPause();

}

public void applySavedPreferences() {

// extract the <key/value> pairs, use default param for missing data

int backColor =

mySharedPreferences.getInt("backColor",

Color.BLACK);

int textSize =

mySharedPreferences.getInt("textSize", 12);

String textStyle =

mySharedPreferences.getString("textStyle","normal");

int layoutColor =

mySharedPreferences.getInt("layoutColor",

Color.DKGRAY);

String msg = "color " + backColor +

"\n" + "size " + textSize + "\n"

+ "style " + textStyle;

Toast.makeText(getApplicationContext(),

msg, 1).show();

txtCaption1.setBackgroundColor(backColor);

txtCaption1.setTextSize(textSize);

if (textStyle.compareTo("normal") ==

0) {

txtCaption1.setTypeface(Typeface.SERIF,

Typeface.NORMAL);

} else {

txtCaption1.setTypeface(Typeface.SERIF,

Typeface.BOLD);

}

myLayout1Vertical.setBackgroundColor(layoutColor);

}// applySavedPreferences

4. Hasil programnya akan seperti berikut :

Tampilan ketika di klik Pref1:

 
 
Tampilan ketika diklik Pref2 :
 
 
 
Tampilan hasil program dalam bentuk video:

 
    • Android presistensi File.
1. Silahkan membuat proyek android baru dengan nama yang merepresentasikan judul latihan dan nama mahasiswa masing-masing.
2. Buat tampilan layout (main_activity.xml)seperti berikut :

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/widget28"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:background="#ff0000ff"

android:orientation="vertical">


<EditText android:id="@+id/txtData"

android:layout_width="fill_parent"

android:layout_height="180px"

android:text="Enter some data here ..."

android:textSize="18sp" />


<Button

android:id="@+id/btnWriteSDFile"

android:layout_width="143px"

android:layout_height="wrap_content"

android:text="1. Write SD File" />


<Button

android:id="@+id/btnClearScreen"

android:layout_width="141px"

android:layout_height="wrap_content"

android:text="2. Clear Screen" />


<Button

android:id="@+id/btnReadSDFile"

android:layout_width="140px"

android:layout_height="wrap_content"

android:text="3. Read SD File" />


<Button

android:id="@+id/btnClose"

android:layout_width="141px"

android:layout_height="wrap_content"

android:text="4. Close" />


</LinearLayout>

3. Koding mainActivity.java seperti berikut :

package com.example.presistenfilepri;


import android.os.Bundle;

import android.app.Activity;

import android.view.Menu;

import java.io.*;

import java.util.Date;

import java.util.Scanner;

import android.content.Context;

import android.os.Environment;

import android.view.*;

import android.view.View.OnClickListener;

import android.widget.*;


public class MainActivity extends Activity {

// GUI controls

EditText txtData,tvMessage;

Button btnWriteSDFile;

Button btnReadSDFile;

Button btnClearScreen;

Button btnClose;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

// bind GUI elements with local controls

txtData= (EditText)findViewById(R.id.txtData);

txtData.setHint("Enter some lines of data here...");

btnWriteSDFile = (Button)findViewById(R.id.btnWriteSDFile);

btnWriteSDFile.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// write on SD card file data from the text box

try{

File myFile= new File("/sdcard/mysdfile.txt");

myFile.createNewFile();

FileOutputStream fOut=new FileOutputStream(myFile);

OutputStreamWriter myOutWriter= new OutputStreamWriter(fOut);

myOutWriter.append(txtData.getText());

myOutWriter.close();

fOut.close();

Toast.makeText(getBaseContext(),

"Done writing SD 'mysdfile.txt'", Toast.LENGTH_SHORT).show();

} catch(Exception e) {

Toast.makeText(getBaseContext(),e.getMessage(),

Toast.LENGTH_SHORT).show();

}

}// onClick

}); // btnWriteSDFile

btnReadSDFile= (Button) findViewById(R.id.btnReadSDFile);

btnReadSDFile.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

try{

File myFile= new File("/sdcard/mysdfile.txt");

FileInputStream fIn= new FileInputStream(myFile);

BufferedReader myReader= new BufferedReader(new

InputStreamReader(fIn));

String aDataRow= "";

String aBuffer= "";

while((aDataRow= myReader.readLine()) != null) {

aBuffer+= aDataRow+ "\n";

}

txtData.setText(aBuffer);

myReader.close();

Toast.makeText(getBaseContext(),

"Done reading SD 'mysdfile.txt'", 1).show();

} catch(Exception e) {

Toast.makeText(getBaseContext(), e.getMessage(), 1).show();

}

}// onClick

}); // btnReadSDFile

btnClearScreen= (Button)

findViewById(R.id.btnClearScreen);

btnClearScreen.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// clear text box

txtData.setText("");

}

}); // btnClearScreen

btnClose= (Button) findViewById(R.id.btnClose);

btnClose.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// clear text box

finish();

}

}); // btnClose

}// onCreate

// class

private void testScannerFiles() throws FileNotFoundException{

// Add to manifest the following permission request

// <uses-permission android:name="android.permission.

//WRITE_EXTERNAL_STORAGE" />

try{

String SDcardPath=

Environment.getExternalStorageDirectory().getPath();

String mySDFileName= SDcardPath+ "/"+ "mysdfiletest.txt";

tvMessage.setText("Writing to: "+ mySDFileName);

PrintWriter outfile= new PrintWriter( new

FileWriter(mySDFileName) );

outfile.println("HolaAndroid");

outfile.println("Adios Android");

outfile.println(new Date().toString());

outfile.close();

// read SD-file,showrecords.

Scanner infile= new Scanner(new

FileReader(mySDFileName));

String inString= "\n\nReadingfrom: "+ mySDFileName+ "\n";

while(infile.hasNextLine()) {

inString+= infile.nextLine() + "\n";

}

tvMessage.append(inString);

infile.close();

} catch(FileNotFoundException e) {

tvMessage.setText( "Error: "+ e.getMessage());

} catch(IOException e) {

tvMessage.setText( "Error: "+ e.getMessage());

}

//writing

FileOutputStream fos= openFileOutput("XYZ",

Context.MODE_PRIVATE);

PrintWriter outfile= new PrintWriter( fos);

outfile.println("HolaAndroid");

outfile.close();

// reading

InputStream is = openFileInput("XYZ");

Scanner infile= new Scanner(is);

String inString= "";

while(infile.hasNextLine()) {

inString= infile.nextLine();

}

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu);

return true;

}

}


4. Hasil programnya akan seperti berikut : 

Menulis file di SD card :

   
 

Clear Screen :

   
 Menulis teks kedalam file mysdfile.txt dan menyimpannya :
 
Clear screeen dan membacanya lagi teks dari file sebelumnya: 
 
 
 
 
Tampilan hasil program dalam bentuk video:

 

Adapun tombol close fungsinya hanya untuk menutup aplikasi saja.

Komentar

Posting Komentar

Berikan komentar yang positif & konstruktif.

Postingan populer dari blog ini

Membuat player audio android eclipse

Kumpulan Materi PPT Perkuliahan Logika dan Algoritma Pemrograman dengan Bahasa Pascal

Perbedaan PHP 7 dan PHP 8