You are on page 1of 24

Android Application Development Training Tutorial

For more info visit http://www.zybotech.in

A7, Stephanos Tower, Eachamukku, Kakkanadu,Kochi

JAVA AddEmployee public class AddEmployee extends Activity { EditText txtName; EditText txtAge; TextView txtEmps; DatabaseHelper dbHelper; Spinner spinDept; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.addemployee); txtName=(EditText)findViewById(R.id.txtName); txtAge=(EditText)findViewById(R.id.txtAge); txtEmps=(TextView)findViewById(R.id.txtEmps); spinDept=(Spinner)findViewById(R.id.spinDept); } @Override public void onStart() { try { super.onStart(); dbHelper=new DatabaseHelper(this); txtEmps.setText(txtEmps.getText()+String.valueOf(dbHelper.getEmployeeCount()));

Cursor c=dbHelper.getAllDepts();

A7, Stephanos Tower, Eachamukku, Kakkanadu,Kochi

startManagingCursor(c); //SimpleCursorAdapter ca=new SimpleCursorAdapter(this,android.R.layout.simple_spinner_item, c, new String [] {DatabaseHelper.colDeptName}, new int []{android.R.id.text1}); SimpleCursorAdapter ca=new SimpleCursorAdapter(this,R.layout.deptspinnerrow, c, new String [] {DatabaseHelper.colDeptName,"_id"}, new int []{R.id.txtDeptName}); //ca.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinDept.setAdapter(ca); spinDept.setOnItemSelectedListener(new OnItemSelectedListener() {

public void onItemSelected(AdapterView<?> parent, View selectedView, int position, long id) { // TODO Auto-generated method stub

public void onNothingSelected(AdapterView<?> arg0) { // TODO Auto-generated method stub } }); //never close cursor } catch(Exception ex) { CatchError(ex.toString()); } } public void btnAddEmp_Click(View view) {

A7, Stephanos Tower, Eachamukku, Kakkanadu,Kochi

boolean ok=true; try { Spannable spn=txtAge.getText(); String name=txtName.getText().toString(); int age=Integer.valueOf(spn.toString()); int deptID=Integer.valueOf((int)spinDept.getSelectedItemId()); Employee emp=new Employee(name,age,deptID); dbHelper.AddEmployee(emp); } catch(Exception ex) { ok=false; CatchError(ex.toString()); } finally { if(ok) { //NotifyEmpAdded(); Alerts.ShowEmpAddedAlert(this); txtEmps.setText("Number of employees "+String.valueOf(dbHelper.getEmployeeCount())); } } } void CatchError(String Exception) { Dialog diag=new Dialog(this); A7, Stephanos Tower, Eachamukku, Kakkanadu,Kochi

diag.setTitle("Add new Employee"); TextView txt=new TextView(this); txt.setText(Exception); diag.setContentView(txt); diag.show(); } void NotifyEmpAdded() { Dialog diag=new Dialog(this); diag.setTitle("Add new Employee"); TextView txt=new TextView(this); txt.setText("Employee Added Successfully"); diag.setContentView(txt); diag.show(); try { diag.wait(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block CatchError(e.toString()); } diag.notify(); diag.dismiss(); }}

Alerts public class Alerts { public static void ShowEmpAddedAlert(Context con) { A7, Stephanos Tower, Eachamukku, Kakkanadu,Kochi

AlertDialog.Builder builder=new AlertDialog.Builder(con); builder.setTitle("Add new Employee"); builder.setIcon(android.R.drawable.ic_dialog_info); DialogListner listner=new DialogListner(); builder.setMessage("Employee Added successfully"); builder.setPositiveButton("ok", listner); AlertDialog diag=builder.create(); diag.show(); } public static AlertDialog ShowEditDialog(final Context con,final Employee emp) { AlertDialog.Builder b=new AlertDialog.Builder(con); b.setTitle("Employee Details"); LayoutInflater li=LayoutInflater.from(con); View v=li.inflate(R.layout.editdialog, null);

b.setIcon(android.R.drawable.ic_input_get); b.setView(v); final TextView txtName=(TextView)v.findViewById(R.id.txtDelName); final TextView txtAge=(TextView)v.findViewById(R.id.txtDelAge); final Spinner spin=(Spinner)v.findViewById(R.id.spinDiagDept); Utilities.ManageDeptSpinner(con, spin); for(int i=0;i<spin.getCount();i++) { long id=spin.getItemIdAtPosition(i); if(id==emp.getDept()) { spin.setSelection(i, true); A7, Stephanos Tower, Eachamukku, Kakkanadu,Kochi

break; } } txtName.setText(emp.getName()); txtAge.setText(String.valueOf(emp.getAge())); b.setPositiveButton("Modify", new OnClickListener() { public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub emp.setName(txtName.getText().toString()); emp.setAge(Integer.valueOf(txtAge.getText().toString())); emp.setDept((int)spin.getItemIdAtPosition(spin.getSelectedItemPosition()));

try { DatabaseHelper db=new DatabaseHelper(con); db.UpdateEmp(emp);

} catch(Exception ex) { CatchError(con, ex.toString()); } } }); b.setNeutralButton("Delete", new OnClickListener() { public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub DatabaseHelper db=new DatabaseHelper(con); A7, Stephanos Tower, Eachamukku, Kakkanadu,Kochi

db.DeleteEmp(emp); } }); b.setNegativeButton("Cancel", null); return b.create(); //diag.show(); } static public void CatchError(Context con, String Exception) { Dialog diag=new Dialog(con); diag.setTitle("Error"); TextView txt=new TextView(con); txt.setText(Exception); diag.setContentView(txt); diag.show(); } }

DatabaseDemo public class DatabaseDemo extends TabActivity { DatabaseHelper dbHelper; GridView grid; TextView txtTest; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); A7, Stephanos Tower, Eachamukku, Kakkanadu,Kochi

SetupTabs(); } @Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(1, 1, 1, "Add Employee"); return true; } public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { //Add employee case 1: Intent addIntent=new Intent(this,AddEmployee.class); startActivity(addIntent); break; } super.onOptionsItemSelected(item); return false; } void SetupTabs() { TabHost host=getTabHost(); TabHost.TabSpec spec=host.newTabSpec("tag1"); Intent in1=new Intent(this, AddEmployee.class); spec.setIndicator("Add Employee"); spec.setContent(in1); A7, Stephanos Tower, Eachamukku, Kakkanadu,Kochi

TabHost.TabSpec spec2=host.newTabSpec("tag2"); Intent in2=new Intent(this, GridList.class); spec2.setIndicator("Employees"); spec2.setContent(in2); host.addTab(spec); host.addTab(spec2); }}

DataBaseHelper public class DatabaseHelper extends SQLiteOpenHelper { static final String dbName="demoDB"; static final String employeeTable="Employees"; static final String colID="EmployeeID"; static final String colName="EmployeeName"; static final String colAge="Age"; static final String colDept="Dept"; static final String deptTable="Dept"; static final String colDeptID="DeptID"; static final String colDeptName="DeptName"; static final String viewEmps="ViewEmps"; public DatabaseHelper(Context context) { super(context, dbName, null,33); // TODO Auto-generated constructor stub } @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub

A7, Stephanos Tower, Eachamukku, Kakkanadu,Kochi

db.execSQL("CREATE TABLE "+deptTable+" ("+colDeptID+ " INTEGER PRIMARY KEY , "+ colDeptName+ " TEXT)"); db.execSQL("CREATE TABLE "+employeeTable+" ("+colID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+colName+" TEXT, "+colAge+" Integer, "+colDept+" INTEGER NOT NULL ,FOREIGN KEY ("+colDept+") REFERENCES "+deptTable+" ("+colDeptID+"));"); db.execSQL("CREATE TRIGGER fk_empdept_deptid " + " BEFORE INSERT "+" ON "+employeeTable+" FOR EACH ROW BEGIN"+" SELECT CASE WHEN ((SELECT "+colDeptID+" FROM "+deptTable+" WHERE "+colDeptID+"=new."+colDept+" ) IS NULL)"+" THEN RAISE (ABORT,'Foreign Key Violation') END;"+ " END;"); db.execSQL("CREATE VIEW "+viewEmps+" AS SELECT "+employeeTable+"."+colID+" AS _id,"+ " "+employeeTable+"."+colName+","+ " "+employeeTable+"."+colAge+","+" "+deptTable+"."+colDeptName+""+" FROM "+employeeTable+" JOIN "+deptTable+" ON "+employeeTable+"."+colDept+" ="+deptTable+"."+colDeptID ); //Inserts pre-defined departments InsertDepts(db); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub db.execSQL("DROP TABLE IF EXISTS "+employeeTable); db.execSQL("DROP TABLE IF EXISTS "+deptTable); db.execSQL("DROP TRIGGER IF EXISTS dept_id_trigger"); db.execSQL("DROP TRIGGER IF EXISTS dept_id_trigger22"); db.execSQL("DROP TRIGGER IF EXISTS fk_empdept_deptid"); db.execSQL("DROP VIEW IF EXISTS "+viewEmps); onCreate(db); }

void AddEmployee(Employee emp) { SQLiteDatabase db= this.getWritableDatabase(); A7, Stephanos Tower, Eachamukku, Kakkanadu,Kochi

ContentValues cv=new ContentValues(); cv.put(colName, emp.getName()); cv.put(colAge, emp.getAge()); cv.put(colDept, emp.getDept()); //cv.put(colDept,2); db.insert(employeeTable, colName, cv); db.close(); } int getEmployeeCount() { SQLiteDatabase db=this.getWritableDatabase(); Cursor cur= db.rawQuery("Select * from "+employeeTable, null); int x= cur.getCount(); cur.close(); return x; } Cursor getAllEmployees() { SQLiteDatabase db=this.getWritableDatabase();

//Cursor cur= db.rawQuery("Select "+colID+" as _id , "+colName+", "+colAge+" from "+employeeTable, new String [] {}); Cursor cur= db.rawQuery("SELECT * FROM "+viewEmps,null); return cur; } Cursor getAllDepts() A7, Stephanos Tower, Eachamukku, Kakkanadu,Kochi

{ SQLiteDatabase db=this.getReadableDatabase(); Cursor cur=db.rawQuery("SELECT "+colDeptID+" as _id, "+colDeptName+" from "+deptTable,new String [] {}); return cur; } void InsertDepts(SQLiteDatabase db) { ContentValues cv=new ContentValues(); cv.put(colDeptID, 1); cv.put(colDeptName, "Sales"); db.insert(deptTable, colDeptID, cv); cv.put(colDeptID, 2); cv.put(colDeptName, "IT"); db.insert(deptTable, colDeptID, cv); cv.put(colDeptID, 3); cv.put(colDeptName, "HR"); db.insert(deptTable, colDeptID, cv); db.insert(deptTable, colDeptID, cv);

} public String GetDept(int ID) { SQLiteDatabase db=this.getReadableDatabase(); String[] params=new String[]{String.valueOf(ID)}; Cursor c=db.rawQuery("SELECT "+colDeptName+" FROM"+ deptTable+" WHERE "+colDeptID+"=?",params); c.moveToFirst();

A7, Stephanos Tower, Eachamukku, Kakkanadu,Kochi

int index= c.getColumnIndex(colDeptName); return c.getString(index); } public Cursor getEmpByDept(String Dept) { SQLiteDatabase db=this.getReadableDatabase(); String [] columns=new String[]{"_id",colName,colAge,colDeptName}; Cursor c=db.query(viewEmps, columns, colDeptName+"=?", new String[]{Dept}, null, null, null); return c; } public int GetDeptID(String Dept) { SQLiteDatabase db=this.getReadableDatabase(); Cursor c=db.query(deptTable, new String[]{colDeptID+" as _id",colDeptName},colDeptName+"=?", new String[]{Dept}, null, null, null); //Cursor c=db.rawQuery("SELECT "+colDeptID+" as _id FROM "+deptTable+" WHERE "+colDeptName+"=?", new String []{Dept}); c.moveToFirst(); return c.getInt(c.getColumnIndex("_id")); } public int UpdateEmp(Employee emp) { SQLiteDatabase db=this.getWritableDatabase(); ContentValues cv=new ContentValues(); cv.put(colName, emp.getName()); cv.put(colAge, emp.getAge()); cv.put(colDept, emp.getDept()); return db.update(employeeTable, cv, colID+"=?", new String []{String.valueOf(emp.getID())});

A7, Stephanos Tower, Eachamukku, Kakkanadu,Kochi

} public void DeleteEmp(Employee emp) { SQLiteDatabase db=this.getWritableDatabase(); db.delete(employeeTable,colID+"=?", new String [] {String.valueOf(emp.getID())}); db.close();}}

DialogListener public class DialogListner implements android.content.DialogInterface.OnClickListener { public DialogListner() { } public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub

}}

Employee public class Employee { int _id; String _name; int _age; int _dept; public Employee(String Name,int Age,int Dept) { this._name=Name; this._age=Age; this._dept=Dept; A7, Stephanos Tower, Eachamukku, Kakkanadu,Kochi

} public Employee(String Name,int Age) { this._name=Name; this._age=Age; } public int getID() { return this._id; } public void SetID(int ID) { this._id=ID; } public String getName() { return this._name; } public int getAge() { return this._age; } public void setName(String Name) { this._name=Name; } public void setAge(int Age) { A7, Stephanos Tower, Eachamukku, Kakkanadu,Kochi

this._age=Age; } public void setDept(int Dept) { this._dept=Dept; } public String getDeptName(Context con, int Dept) { return new DatabaseHelper(con).GetDept(Dept); } public int getDept() { return this._dept; } }

GridList public class GridList extends Activity { DatabaseHelper dbHelper; static public GridView grid; TextView txtTest; Spinner spinDept1; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.gridview); grid=(GridView)findViewById(R.id.grid); A7, Stephanos Tower, Eachamukku, Kakkanadu,Kochi

txtTest=(TextView)findViewById(R.id.txtTest); spinDept1=(Spinner)findViewById(R.id.spinDept1); Utilities.ManageDeptSpinner(this.getParent(),spinDept1); final DatabaseHelper db=new DatabaseHelper(this); try {

spinDept1.setOnItemSelectedListener(new OnItemSelectedListener() { public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub LoadGrid(); //sca.notifyDataSetChanged(); } public void onNothingSelected(AdapterView<?> arg0) { // TODO Auto-generated method stub } }); } catch(Exception ex) { txtTest.setText(ex.toString()); } try { grid.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View v, int position, A7, Stephanos Tower, Eachamukku, Kakkanadu,Kochi

long id) { // TODO Auto-generated method stub try { SQLiteCursor cr=(SQLiteCursor)parent.getItemAtPosition(position); String name= cr.getString(cr.getColumnIndex(DatabaseHelper.colName)); int age=cr.getInt(cr.getColumnIndex(DatabaseHelper.colAge)); String Dept= cr.getString(cr.getColumnIndex(DatabaseHelper.colDeptName)); Employee emp=new Employee(name, age,db.GetDeptID(Dept)); emp.SetID((int)id); AlertDialog diag= Alerts.ShowEditDialog(GridList.this,emp); diag.setOnDismissListener(new OnDismissListener() { public void onDismiss(DialogInterface dialog) { // TODO Auto-generated method stub txtTest.setText("dismissed"); //((SimpleCursorAdapter)grid.getAdapter()).notifyDataSetChanged(); LoadGrid(); } }); diag.show(); } catch(Exception ex) { Alerts.CatchError(GridList.this, ex.toString()); } }

A7, Stephanos Tower, Eachamukku, Kakkanadu,Kochi

}); } catch(Exception ex) { } } @Override public void onStart() { super.onStart(); //LoadGrid(); } public void LoadGrid() { dbHelper=new DatabaseHelper(this); try { //Cursor c=dbHelper.getAllEmployees(); View v=spinDept1.getSelectedView(); TextView txt=(TextView)v.findViewById(R.id.txtDeptName); String Dept=String.valueOf(txt.getText()); Cursor c=dbHelper.getEmpByDept(Dept); startManagingCursor(c);

String [] from=new String []{DatabaseHelper.colName,DatabaseHelper.colAge,DatabaseHelper.colDeptName}; int [] to=new int [] {R.id.colName,R.id.colAge,R.id.colDept}; SimpleCursorAdapter sca=new SimpleCursorAdapter(this,R.layout.gridrow,c,from,to); A7, Stephanos Tower, Eachamukku, Kakkanadu,Kochi

grid.setAdapter(sca); } catch(Exception ex) { AlertDialog.Builder b=new AlertDialog.Builder(this); b.setMessage(ex.toString()); b.show(); } } }

Utilities public class Utilities { static public void ManageDeptSpinner(Context context,Spinner view) { DatabaseHelper dbHelper=new DatabaseHelper(context); Cursor c=dbHelper.getAllDepts(); //context.startManagingCursor(c); //SimpleCursorAdapter ca=new SimpleCursorAdapter(this,android.R.layout.simple_spinner_item, c, new String [] {DatabaseHelper.colDeptName}, new int []{android.R.id.text1}); SimpleCursorAdapter ca=new SimpleCursorAdapter(context,R.layout.deptspinnerrow, c, new String [] {DatabaseHelper.colDeptName,"_id"}, new int []{R.id.txtDeptName}); view.setAdapter(ca); } }

A7, Stephanos Tower, Eachamukku, Kakkanadu,Kochi

XML AddEmployee
<?xml version="1.0" encoding="utf-8" ?> - <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content"> - <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Employee Name" /> <EditText android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/txtName" android:autoText="false" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Employee Age" /> <EditText android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/txtAge" android:inputType="number" android:digits="0123456789" android:singleLine="true" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Employee Dept" /> <Spinner android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/spinDept" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/btnAdd" android:text="Add Employee" android:onClick="btnAddEmp_Click" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Number of employees" android:id="@+id/txtEmps" /> </LinearLayout> </ScrollView>

editdialog
<?xml version="1.0" encoding="utf-8" ?> - <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical"> - <TableRow> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Name:" /> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/txtDelName" /> </TableRow> - <TableRow> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Age:" /> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/txtDelAge" /> </TableRow> - <TableRow> <Spinner android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/spinDiagDept" android:layout_span="2" /> </TableRow> <TableRow /> </TableLayout>

A7, Stephanos Tower, Eachamukku, Kakkanadu,Kochi

Deptspinnerrow
<?xml version="1.0" encoding="utf-8" ?> - <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/txtDeptName" android:textColor="#000" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/txtDeptID" android:textColor="#000" /> </LinearLayout>

Gridrow
<?xml version="1.0" encoding="utf-8" ?> - <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> - <TableRow> <TextView android:layout_width="50px" android:layout_height="wrap_content" android:id="@+id/colName" android:padding="5px" android:layout_weight="1" /> <TextView android:layout_width="50px" android:layout_height="wrap_content" android:id="@+id/colAge" android:padding="5px" android:layout_weight="1" /> <TextView android:layout_width="50px" android:layout_height="wrap_content" android:id="@+id/colDept" android:padding="5px" android:layout_weight="1" /> </TableRow> </TableLayout>

Gridview
<?xml version="1.0" encoding="utf-8" ?> - <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/tab1"> - <TableLayout android:layout_width="fill_parent" android:layout_height="fill_parent"> - <TableRow> <Spinner android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/spinDept1" android:layout_span="3" /> </TableRow> - <TableRow> <TextView android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="Employee Name" android:layout_weight="1" /> <TextView android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="Employee Age" android:layout_weight="1" /> <TextView android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="Department" android:layout_weight="1" /> </TableRow> </TableLayout> <GridView android:id="@+id/grid" android:layout_width="fill_parent" android:layout_height="fill_parent" android:numColumns="1" android:stretchMode="columnWidth" /> <TextView android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="Employee Age" android:id="@+id/txtTest" /> </LinearLayout>

A7, Stephanos Tower, Eachamukku, Kakkanadu,Kochi

listview
<?xml version="1.0" encoding="utf-8" ?> - <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content"> <ListView android:id="@+id/listEmps" android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="A semi-random button" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" android:id="@+id/txt" /> </LinearLayout>

Main
<?xml version="1.0" encoding="utf-8" ?> - <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@android:id/tabhost"> <TabWidget android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@android:id/tabs" /> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="fill_parent" android:paddingTop="60px" /> </TabHost>

A7, Stephanos Tower, Eachamukku, Kakkanadu,Kochi

You might also like