Mega Code Archive

 
Categories / Android / Database
 

Using Database

/* Welcome to the source code for Android Programming Tutorials (http://commonsware.com/AndTutorials)! Specifically, this is for Version 3.2 and above of this book. For the source code for older versions of this book, please visit: https://github.com/commonsguy/cw-andtutorials All of the source code in this archive is licensed under the Apache 2.0 license except as noted. The names of the top-level directories roughly correspond to a shortened form of the chapter titles. Since chapter numbers change with every release, and since some samples are used by multiple chapters, I am loathe to put chapter numbers in the actual directory names. If you wish to use this code, bear in mind a few things: * The projects are set up to be built by Ant, not by Eclipse.   If you wish to use the code with Eclipse, you will need to   create a suitable Android Eclipse project and import the   code and other assets. * You should delete build.xml from the project, then run     android update project -p ...   (where ... is the path to a project of interest)   on those projects you wish to use, so the build files are   updated for your Android SDK version. */ package apt.tutorial; import android.content.Context; import android.content.ContentValues; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteQueryBuilder; class RestaurantHelper extends SQLiteOpenHelper {   private static final String DATABASE_NAME="lunchlist.db";   private static final int SCHEMA_VERSION=1;      public RestaurantHelper(Context context) {     super(context, DATABASE_NAME, null, SCHEMA_VERSION);   }      @Override   public void onCreate(SQLiteDatabase db) {     db.execSQL("CREATE TABLE restaurants (_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, address TEXT, type TEXT, notes 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, name, address, type, notes FROM restaurants ORDER BY name",                       null));   }      public void insert(String name, String address,                      String type, String notes) {     ContentValues cv=new ContentValues();                cv.put("name", name);     cv.put("address", address);     cv.put("type", type);     cv.put("notes", notes);          getWritableDatabase().insert("restaurants", "name", cv);   }      public String getName(Cursor c) {     return(c.getString(1));   }      public String getAddress(Cursor c) {     return(c.getString(2));   }      public String getType(Cursor c) {     return(c.getString(3));   }      public String getNotes(Cursor c) {     return(c.getString(4));   } } //11-Database\LunchList\src\apt\tutorial\LunchList.java package apt.tutorial; 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 LunchList extends TabActivity {   Cursor model=null;   RestaurantAdapter adapter=null;   EditText name=null;   EditText address=null;   EditText notes=null;   RadioGroup types=null;   RestaurantHelper helper=null;      @Override   public void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.main);          helper=new RestaurantHelper(this);          name=(EditText)findViewById(R.id.name);     address=(EditText)findViewById(R.id.addr);     notes=(EditText)findViewById(R.id.notes);     types=(RadioGroup)findViewById(R.id.types);          Button save=(Button)findViewById(R.id.save);          save.setOnClickListener(onSave);          ListView list=(ListView)findViewById(R.id.restaurants);          model=helper.getAll();     startManagingCursor(model);     adapter=new RestaurantAdapter(model);     list.setAdapter(adapter);          TabHost.TabSpec spec=getTabHost().newTabSpec("tag1");          spec.setContent(R.id.restaurants);     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.restaurant));     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 (types.getCheckedRadioButtonId()) {         case R.id.sit_down:           type="sit_down";           break;         case R.id.take_out:           type="take_out";           break;         case R.id.delivery:           type="delivery";           break;       }              helper.insert(name.getText().toString(),                     address.getText().toString(), type,                     notes.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);       name.setText(helper.getName(model));       address.setText(helper.getAddress(model));       notes.setText(helper.getNotes(model));              if (helper.getType(model).equals("sit_down")) {         types.check(R.id.sit_down);       }       else if (helper.getType(model).equals("take_out")) {         types.check(R.id.take_out);       }       else {         types.check(R.id.delivery);       }              getTabHost().setCurrentTab(1);     }   };      class RestaurantAdapter extends CursorAdapter {     RestaurantAdapter(Cursor c) {       super(LunchList.this, c);     }          @Override     public void bindView(View row, Context ctxt,                          Cursor c) {       RestaurantHolder holder=(RestaurantHolder)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);       RestaurantHolder holder=new RestaurantHolder(row);              row.setTag(holder);              return(row);     }   }      static class RestaurantHolder {     private TextView name=null;     private TextView address=null;     private ImageView icon=null;          RestaurantHolder(View row) {       name=(TextView)row.findViewById(R.id.title);       address=(TextView)row.findViewById(R.id.address);       icon=(ImageView)row.findViewById(R.id.icon);     }          void populateFrom(Cursor c, RestaurantHelper helper) {       name.setText(helper.getName(c));       address.setText(helper.getAddress(c));          if (helper.getType(c).equals("sit_down")) {         icon.setImageResource(R.drawable.ball_red);       }       else if (helper.getType(c).equals("take_out")) {         icon.setImageResource(R.drawable.ball_yellow);       }       else {         icon.setImageResource(R.drawable.ball_green);       }     }   } } //11-Database\LunchList\res\values\strings.xml <?xml version="1.0" encoding="utf-8"?> <resources>     <string name="app_name">LunchList</string> </resources> //11-Database\LunchList\res\menu\option.xml <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android">   <item android:id="@+id/toast"     android:title="Raise Toast"     android:icon="@drawable/toast"   />   <item android:id="@+id/run"     android:title="Run Long Task"     android:icon="@drawable/run"   /> </menu> //11-Database\LunchList\res\layout-land\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"       >       <ListView android:id="@+id/restaurants"         android:layout_width="fill_parent"         android:layout_height="wrap_content"       />       <TableLayout android:id="@+id/details"         android:layout_width="fill_parent"         android:layout_height="wrap_content"         android:stretchColumns="1,3"         android:paddingTop="4dip"         >         <TableRow>           <TextView             android:text="Name:"             android:paddingRight="2dip"           />           <EditText             android:id="@+id/name"             android:maxWidth="140sp"           />           <TextView             android:text="Address:"             android:paddingLeft="2dip"             android:paddingRight="2dip"           />           <EditText             android:id="@+id/addr"             android:maxWidth="140sp"           />         </TableRow>         <TableRow>           <TextView android:text="Type:" />           <RadioGroup android:id="@+id/types">             <RadioButton android:id="@+id/take_out"               android:text="Take-Out"             />             <RadioButton android:id="@+id/sit_down"               android:text="Sit-Down"             />             <RadioButton android:id="@+id/delivery"               android:text="Delivery"             />           </RadioGroup>           <TextView             android:text="Notes:"             android:paddingLeft="2dip"           />           <LinearLayout             android:layout_width="fill_parent"             android:layout_height="fill_parent"             android:orientation="vertical"             >             <EditText android:id="@+id/notes"               android:singleLine="false"               android:gravity="top"               android:lines="2"               android:scrollHorizontally="false"               android:maxLines="2"               android:maxWidth="140sp"               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> //11-Database\LunchList\res\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="4dip"   >   <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="4dip"   />   <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/address"       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> //11-Database\LunchList\res\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/restaurants"           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="4dip"         >         <TableRow>           <TextView android:text="Name:" />           <EditText android:id="@+id/name" />         </TableRow>         <TableRow>           <TextView android:text="Address:" />           <EditText android:id="@+id/addr" />         </TableRow>         <TableRow>           <TextView android:text="Type:" />           <RadioGroup android:id="@+id/types">             <RadioButton android:id="@+id/take_out"               android:text="Take-Out"             />             <RadioButton android:id="@+id/sit_down"               android:text="Sit-Down"             />             <RadioButton android:id="@+id/delivery"               android:text="Delivery"             />           </RadioGroup>         </TableRow>         <TableRow>           <TextView android:text="Notes:" />           <EditText android:id="@+id/notes"             android:singleLine="false"             android:gravity="top"             android:lines="2"             android:scrollHorizontally="false"             android:maxLines="2"             android:maxWidth="200sp"           />         </TableRow>         <Button android:id="@+id/save"           android:layout_width="fill_parent"           android:layout_height="wrap_content"           android:text="Save"         />       </TableLayout>     </FrameLayout>   </LinearLayout> </TabHost>