Aplikasi ListArrayAdapter Koneksi Database

Pada aplikasi database ini akan kita rancang akan menyimpan alamat seperti pada aplikasi array sebelumnya, tetapi dalam hal ini kita menyimpan dalam database. Buatlah project baru seperti berikut ini.

Project Name : SQLiteDatabase1
Buitl Target : Android 2.2
Application name : SQLiteDatabase1
Package name : com.wilis.database2
Activity : database2
Min SDK :8

Buatlah sebuah file java baru di dalam direktori src/com.wilis.database2 dengan cara klik kanan > New > Calss berinama file AlmagHelper kemudian ubah isi file menjadi seperti ini :


AlmagHelper .java 
------------------------------------------------------------------------------------------
package com.wilis.database2;

import android.content.Context;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase;


class AlmagHelper extends SQLiteOpenHelper {
 private static final String DATABASE_NAME="addressmanager.db";
 private static final int SCHEMA_VERSION=1;

 public AlmagHelper(Context context) { 
  super(context, DATABASE_NAME, null, SCHEMA_VERSION);
 }

 @Override
 public void onCreate(SQLiteDatabase db) {
  db.execSQL("CREATE TABLE almag (_id INTEGER PRIMARY KEY AUTOINCREMENT,nama TEXT, alamat TEXT, jekel TEXT, hp TEXT);");
 }

 @Override
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
  // no-op, since will not be called until 2nd schema
  // version exists 
 }
 public Cursor getAll() {
      return(getReadableDatabase()
          .rawQuery("SELECT _id, nama, alamat, jekel,hp FROM almag ORDER BY nama",
               null));
     }
    
     public void insert(String nama, String alamat,
               String jekel,
    String hp) {
      ContentValues cv=new ContentValues();
         
      cv.put("nama", nama);
      cv.put("alamat", alamat);
      cv.put("jekel", jekel);
      cv.put("hp", hp);
      
      getWritableDatabase().insert("almag", "name", cv); 
     }
    
     public String getNama(Cursor c) {
      return(c.getString(1));
     }
    
     public String getAlamat(Cursor c) {
      return(c.getString(2));
     }
    
     public String getJekel(Cursor c) {
      return(c.getString(3));
     }
    
     public String getHp(Cursor c) {
      return(c.getString(4));
     }
    }

-----------------------------------------------------

Ubahlah file database2.java dalam direktori src/com.wilis.database2 menjadi seperti ini :
database2.java
-------------------------------------------------------------------------------------------------------------
package com.wilis.database2;

import android.app.TabActivity;
import android.content.Context;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.LayoutInflater;
import android.widget.AdapterView;
import android.widget.CursorAdapter;
import android.widget.Button; 
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RadioGroup;
import android.widget.TabHost;
import android.widget.TextView;

public class database2 extends TabActivity {
 Cursor model=null;
 AlmagAdapter adapter=null;
 EditText nama=null;
 EditText alamat=null;
 EditText hp=null;
 RadioGroup jekel=null;
 AlmagHelper helper=null;

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  
  helper=new AlmagHelper(this); 
  
  nama=(EditText)findViewById(R.id.nama);
  alamat=(EditText)findViewById(R.id.alamat);
  hp=(EditText)findViewById(R.id.hp);
  jekel=(RadioGroup)findViewById(R.id.jekel);
  
  Button save=(Button)findViewById(R.id.save);
  
  save.setOnClickListener(onSave);
   
  ListView list=(ListView)findViewById(R.id.almag); 
  
  model=helper.getAll(); 
  startManagingCursor(model);
  adapter=new AlmagAdapter(model); 
list.setAdapter(adapter);
  
  TabHost.TabSpec spec=getTabHost().newTabSpec("tag1");
  
  spec.setContent(R.id.almag);
  spec.setIndicator("List", getResources().getDrawable(R.drawable.list));
  getTabHost().addTab(spec);
  
  spec=getTabHost().newTabSpec("tag2");
  spec.setContent(R.id.details);
  spec.setIndicator("Details",
getResources().getDrawable(R.drawable.alamat));
  
  getTabHost().addTab(spec);
  
  getTabHost().setCurrentTab(0);
  
  list.setOnItemClickListener(onListClick); 
 }

 @Override
 public void onDestroy() {
  super.onDestroy();
  
  helper.close();
 }

 private View.OnClickListener onSave=new View.OnClickListener() {
  public void onClick(View v) {
   String type=null;
   
   switch (jekel.getCheckedRadioButtonId()) {
    case R.id.pria:
     type="Pria";
     break;
    case R.id.perempuan:
     type="Perempuan";
     break;
   } 
   

 helper.insert(nama.getText().toString(),alamat.getText().toString(),type,hp.getText().toString());
   model.requery();
  }
 };

 private AdapterView.OnItemClickListener onListClick=new
AdapterView.OnItemClickListener() {
  public void onItemClick(AdapterView<?> parent,
             
  View view, int position, 
             
  long id) {
   model.moveToPosition(position); 
   nama.setText(helper.getNama(model));
   alamat.setText(helper.getAlamat(model));
   hp.setText(helper.getHp(model));
   
   if (helper.getJekel(model).equals("Pria")) {
    jekel.check(R.id.pria);
   }
   else if (helper.getJekel(model).equals("Perempuan")) {
    jekel.check(R.id.perempuan);
   }
   
   
   getTabHost().setCurrentTab(1);
  }
 };

 class AlmagAdapter extends CursorAdapter {
  AlmagAdapter(Cursor c) { 
   super(database2.this, c);
  }
  
  @Override
  public void bindView(View row, Context ctxt,
            
Cursor c) {
   AlmagHolder holder=(AlmagHolder)row.getTag();
   
   holder.populateFrom(c, helper);
  }
  
  @Override
  public View newView(Context ctxt, Cursor c,
            
ViewGroup parent) {
   LayoutInflater inflater=getLayoutInflater();
   View row=inflater.inflate(R.layout.row, parent, false);
   AlmagHolder holder=new AlmagHolder(row);
   
   row.setTag(holder); 
   
   return(row);
  }
 }

 static class AlmagHolder {
  private TextView nama=null;
  private TextView alamat=null;
  private ImageView icon=null;
  private View row=null;
  
  AlmagHolder(View row) { 
   this.row=row; 
    
   nama=(TextView)row.findViewById(R.id.title);
   alamat=(TextView)row.findViewById(R.id.alamat); 
   icon=(ImageView)row.findViewById(R.id.icon);
  }
  
  void populateFrom(Cursor c, AlmagHelper helper) {
   nama.setText(helper.getNama(c));
   alamat.setText(helper.getAlamat(c));

   if (helper.getJekel(c).equals("Pria")) {
    icon.setImageResource(R.drawable.pria);
   }
   else if (helper.getJekel(c).equals("Perempuan")) {
    icon.setImageResource(R.drawable.perempuan);
   }
   
  }
 }
}


-------------------------------------------------------------

Inputan form kita terdiri dari nama, alamat, jenis kelamin dan no hp. Kemudian tampilan dibagi menjadi 2 tabulasi, pertama adalah list data yang sudah disimpan dalam database atau yang sudah diinputkan, tabulasi kedua adalah form input data yang akan dimasukkan dalam database. Dibutuhkan beberapa layout xml sebagai berikut:

layout/main.xml 

-------------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@android:id/tabhost"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent">
 <LinearLayout
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
  <TabWidget android:id="@android:id/tabs"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
  />
  <FrameLayout android:id="@android:id/tabcontent"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   >
   <LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <ListView android:id="@+id/almag" 
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
    />
   </LinearLayout>
   <TableLayout android:id="@+id/details"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:stretchColumns="1"
    android:paddingTop="4px"
    >
    <TableRow>
     <TextView android:text="Nama:" />
     <EditText android:id="@+id/nama" />
    </TableRow>
    <TableRow> 
        <TextView android:text="Alamat:" />
     <EditText android:id="@+id/alamat" />
    </TableRow>
    <TableRow>
     <TextView android:text="Jekel:" />
     <RadioGroup android:id="@+id/jekel">
      <RadioButton android:id="@+id/pria"
       android:text="Pria"
      />
      <RadioButton android:id="@+id/perempuan"
       android:text="Perempuan"
      />
     </RadioGroup>
    </TableRow>
    <TableRow>
     <TextView android:text="Hp:" />
     <EditText android:id="@+id/hp"
      android:gravity="top" 
      android:scrollHorizontally="false"
      
     />
    </TableRow>
    <Button android:id="@+id/save"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:text="Save"
    />
   </TableLayout>
  </FrameLayout>
 </LinearLayout>
</TabHost> 

--------------------------------------------------------------------------
layout/row.xml
------------------------------------------------------------------------------------------------------------------------------------------
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:orientation="horizontal"
 android:padding="4px"
 >
 <ImageView android:id="@+id/icon"
  android:layout_width="wrap_content"
  android:layout_height="fill_parent"
  android:layout_alignParentTop="true"
  android:layout_alignParentBottom="true"
  android:layout_marginRight="4px" 
 /> 
 <LinearLayout
  android:layout_width="fill_parent" 
  android:layout_height="wrap_content" 
  android:orientation="vertical"
  > 
  <TextView android:id="@+id/title"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:layout_weight="1"
   android:gravity="center_vertical"
   android:textStyle="bold"
   android:singleLine="true"
   android:ellipsize="end"
  />
  <TextView android:id="@+id/alamat"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:layout_weight="1"
   android:gravity="center_vertical"
   android:singleLine="true"
   android:ellipsize="end"
  /> 
 </LinearLayout>
</LinearLayout>

----------------------------------------------------------
Buatlah folder baru land di dalam layout. Klik kana pada layout - New - Folder Kemudian beri nama land. 
di dalam land kita buat satu main.xml caranya klik kanan pada land - New- File, setelah itu kita namakan main.xml

Ganti Kode pada main.xml menjadi sepertik berikut
Main.xml

-------------------------------------------------------------------------------------------------------------------------

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@android:id/tabhost"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent">
 <LinearLayout
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
  <TabWidget android:id="@android:id/tabs"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
  /> 
  <FrameLayout android:id="@android:id/tabcontent"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   >
   <LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <ListView android:id="@+id/almag"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content" 
    />
   </LinearLayout>
   <TableLayout android:id="@+id/details"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:stretchColumns="1,3"
    android:paddingTop="4px"
    >
    <TableRow>
     <TextView
      android:text="Nama:"
      android:paddingRight="2px"
     />
     <EditText
      android:id="@+id/nama"
      android:maxWidth="140sp"
     />
     <TextView
      android:text="Alamat:"
      android:paddingLeft="2px"
      android:paddingRight="2px"
     />
     <EditText 
      android:id="@+id/alamat"
      android:maxWidth="140sp"
     />
    </TableRow>
    <TableRow>
     <TextView android:text="Type:" />
     <RadioGroup android:id="@+id/jekel">
      <RadioButton android:id="@+id/pria"
       android:text="Pria"
      />
      <RadioButton android:id="@+id/perempuan"
       android:text="Perempuan"
      />
     </RadioGroup>
     <TextView
      android:text="Hp:"
      android:paddingLeft="2px"
     />
     <LinearLayout
      android:layout_width="fill_parent"
      android:layout_height="fill_parent" 
      android:orientation="vertical"
      >
      <EditText android:id="@+id/hp"
       android:singleLine="false"
       android:gravity="top"
       android:scrollHorizontally="false"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
      />
      <Button android:id="@+id/save"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content" 
       android:text="Save" 
      /> 
     </LinearLayout>
    </TableRow> 
    </TableLayout>
  </FrameLayout>
 </LinearLayout>
</TabHost>  
------------------------------------------------------------------------

Setelah itu Run dengan shourcut CTRL+F11 atau klik Kanan package > Runa As > Android Projeck. Lihat Hasilnya 

Untuk Mengatasi Terjadi Force Close, Pada package src/AndroidManifest, buka AndroidManifest.xml pastikan kodenya seperti berikut




terima kasih.

Share this

Related Posts

Previous
Next Post »