目錄java
@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_menu, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { TextView label = (TextView)findViewById(R.id.label); switch (item.getItemId()) { case R.id.main_menu_0: label.setText("打印,菜單ID:" + item.getItemId()); return true; case R.id.main_menu_1: label.setText("新建,菜單ID:" + item.getItemId()); return true; case R.id.main_menu_2: label.setText("郵件,菜單ID:" + item.getItemId()); return true; case R.id.main_menu_3: label.setText("設置,菜單ID:" + item.getItemId()); return true; case R.id.main_menu_4: label.setText("訂閱,菜單ID:" + item.getItemId()); return true; default: return false; } }
全體文件:android
public class OptionMenu2Activity extends Activity { final static int MENU_00 = Menu.FIRST; final static int MENU_01 = Menu.FIRST+1; final static int MENU_02 = Menu.FIRST+2; final static int MENU_03 = Menu.FIRST+3; final static int MENU_04 = Menu.FIRST+4; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(0,MENU_00,0,"打印").setIcon(R.drawable.pic0); menu.add(0,MENU_01,1,"新建").setIcon(R.drawable.pic1); menu.add(0,MENU_02,2,"郵件").setIcon(R.drawable.pic2); menu.add(0,MENU_03,3,"設置").setIcon(R.drawable.pic3); menu.add(0,MENU_04,4,"訂閱").setIcon(R.drawable.pic4); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { TextView label = (TextView)findViewById(R.id.label); switch (item.getItemId()) { case MENU_00: label.setText("打印,菜單ID:" + item.getItemId()); return true; case MENU_01: label.setText("新建,菜單ID:" + item.getItemId()); return true; case MENU_02: label.setText("郵件,菜單ID:" + item.getItemId()); return true; case MENU_03: label.setText("設置,菜單ID:" + item.getItemId()); return true; case MENU_04: label.setText("訂閱,菜單ID:" + item.getItemId()); return true; default: return false; } } }
imageButton.setImageResource(R.drawable.download); imageButton.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { textView.setText("ImageButtonTest"); } });
final CheckBox checkBox1= (CheckBox)findViewById(R.id.CheckBox01); final CheckBox checkBox2= (CheckBox)findViewById(R.id.CheckBox02); CheckBox.OnClickListener checkboxListener = new CheckBox.OnClickListener(){ @Override public void onClick(View v) { switch(v.getId()){ case R.id.CheckBox01: textView.setText("CheckBox01, isChecked:"+String.valueOf(checkBox1.isChecked())); return; case R.id.CheckBox02: textView.setText("CheckBox02, isChecked:"+String.valueOf(checkBox2.isChecked())); return; } }}; checkBox1.setOnClickListener(checkboxListener); checkBox2.setOnClickListener(checkboxListener);
final RadioButton radioButton1 = (RadioButton)findViewById(R.id.RadioButton01); final RadioButton radioButton2 = (RadioButton)findViewById(R.id.RadioButton02); RadioButton.OnClickListener radioButtonListener = new RadioButton.OnClickListener(){ @Override public void onClick(View v) { switch(v.getId()){ case R.id.RadioButton01: textView.setText("RadioButton1 is selected"); return; case R.id.RadioButton02: textView.setText("RadioButton2 is selected");; return; } }}; radioButton1.setOnClickListener(radioButtonListener); radioButton2.setOnClickListener(radioButtonListener);
public class ContextMenuActivity extends Activity { /** Called when the activity is first created. */ final static int CONTEXT_MENU_1 = Menu.FIRST; final static int CONTEXT_MENU_2 = Menu.FIRST+1; final static int CONTEXT_MENU_3 = Menu.FIRST+2; TextView LabelView = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); LabelView = (TextView)findViewById(R.id.label); LabelView.setText(Html.fromHtml("<font color=\"#ff0000\">紅色</font>其它顏色")); registerForContextMenu(LabelView); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo){ menu.setHeaderTitle("快捷菜單標題"); menu.add(0, CONTEXT_MENU_1, 0,"菜單子項1"); menu.add(0, CONTEXT_MENU_2, 1,"菜單子項2"); menu.add(0, CONTEXT_MENU_3, 2,"菜單子項3"); } @Override public boolean onContextItemSelected(MenuItem item){ switch(item.getItemId()){ case CONTEXT_MENU_1: LabelView.setText("菜單子項1"); return true; case CONTEXT_MENU_2: LabelView.setText("菜單子項2"); return true; case CONTEXT_MENU_3: LabelView.setText("菜單子項3"); return true; } return false; } }
public class KeyEventDemoActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); EditText entryText = (EditText)findViewById(R.id.entry); final CheckBox checkBox = (CheckBox)findViewById(R.id.block); final TextView labelView = (TextView)findViewById(R.id.label); entryText.setOnKeyListener(new OnKeyListener(){ @Override public boolean onKey(View view, int keyCode, KeyEvent keyEvent) { int metaState = keyEvent.getMetaState(); int unicodeChar = keyEvent.getUnicodeChar(); String msg = ""; msg +="按鍵動做:" + String.valueOf(keyEvent.getAction())+"\n"; msg +="按鍵代碼:" + String.valueOf(keyCode)+"\n"; msg +="按鍵字符:" + (char)unicodeChar+"\n"; msg +="UNICODE:" + String.valueOf(unicodeChar)+"\n"; msg +="重複次數:" + String.valueOf(keyEvent.getRepeatCount())+"\n"; msg +="功能鍵狀態:" + String.valueOf(metaState)+"\n"; msg +="硬件編碼:" + String.valueOf(keyEvent.getScanCode())+"\n"; msg +="按鍵標誌:" + String.valueOf(keyEvent.getFlags())+"\n"; labelView.setText(msg); if (checkBox.isChecked()) return true; else return false; } }); } }
public class ListViewDemoActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final TextView textView = (TextView)findViewById(R.id.TextView01); ListView listView = (ListView)findViewById(R.id.ListView01); List<String> list = new ArrayList<String>(); list .add("ListView子項1"); list .add("ListView子項2"); list .add("ListView子項3"); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list ); listView.setAdapter(adapter); AdapterView.OnItemClickListener listViewListener = new AdapterView.OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { String msg = "父View:"+arg0.toString()+"\n"+ "子View:"+arg1.toString()+"\n"+ "位置:"+String.valueOf(arg2)+",ID:"+String.valueOf(arg3); textView.setText(msg); }}; listView.setOnItemClickListener(listViewListener); } }
package edu.hrbeu.SubMenu2; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.SubMenu; import android.widget.TextView; public class SubMenu2Activity extends Activity { final static int MENU_00 = Menu.FIRST; final static int MENU_01 = Menu.FIRST+1; final static int SUB_MENU_00_01 = Menu.FIRST+2; final static int SUB_MENU_01_00 = Menu.FIRST+3; final static int SUB_MENU_01_01 = Menu.FIRST+4; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override public boolean onCreateOptionsMenu(Menu menu) { SubMenu sub1 = (SubMenu) menu.addSubMenu(0,MENU_00,0,"設置") .setHeaderIcon(R.drawable.pic3); sub1.add(0,SUB_MENU_00_01 ,0,"打印").setIcon(R.drawable.pic0); SubMenu sub2 = (SubMenu) menu.addSubMenu(0,MENU_01,1,"新建") .setHeaderIcon(R.drawable.pic1); sub2.add(0,SUB_MENU_01_00 ,0,"郵件").setIcon(R.drawable.pic2); sub2.add(0,SUB_MENU_01_01 ,0,"訂閱").setIcon(R.drawable.pic4); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { TextView label = (TextView)findViewById(R.id.label); switch (item.getItemId()) { case MENU_00: label.setText("設置,菜單ID:" + item.getItemId()); return true; case MENU_01: label.setText("新建,菜單ID:" + item.getItemId()); return true; case SUB_MENU_00_01: label.setText("打印,子菜單ID:" + item.getItemId()); return true; case SUB_MENU_01_00: label.setText("郵件,子菜單ID:" + item.getItemId()); return true; case SUB_MENU_01_01: label.setText("訂閱,子菜單ID:" + item.getItemId()); return true; default: return false; } } }
ActivityCommunication.javasql
package edu.hrbeu.ActivityCommunication; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class ActivityCommunicationActivity extends Activity { private static final int SUBACTIVITY1 = 1; private static final int SUBACTIVITY2 = 2; TextView textView; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); textView = (TextView)findViewById(R.id.textShow); final Button btn1 = (Button)findViewById(R.id.btn1); final Button btn2 = (Button)findViewById(R.id.btn2); btn1.setOnClickListener(new OnClickListener(){ public void onClick(View view){ Intent intent = new Intent(ActivityCommunicationActivity.this, SubActivity1.class); startActivityForResult(intent, SUBACTIVITY1); } }); btn2.setOnClickListener(new OnClickListener(){ public void onClick(View view){ Intent intent = new Intent(ActivityCommunicationActivity.this, SubActivity2.class); startActivityForResult(intent, SUBACTIVITY2); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch(requestCode){ case SUBACTIVITY1: if (resultCode == RESULT_OK){ Uri uriData = data.getData(); textView.setText(uriData.toString()); } break; case SUBACTIVITY2: break; } } }
SubActivity1.java數據庫
package edu.hrbeu.ActivityCommunication; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; public class SubActivity1 extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.subactivity1); final EditText editText = (EditText)findViewById(R.id.edit); Button btnOK = (Button)findViewById(R.id.btn_ok); Button btnCancel = (Button)findViewById(R.id.btn_cancel); btnOK.setOnClickListener(new OnClickListener(){ public void onClick(View view){ String uriString = editText.getText().toString(); Uri data = Uri.parse(uriString); Intent result = new Intent(null, data); setResult(RESULT_OK, result); finish(); } }); btnCancel.setOnClickListener(new OnClickListener(){ public void onClick(View view){ setResult(RESULT_CANCELED, null); finish(); } }); } }
SubActivity2.javaapp
package edu.hrbeu.ActivityCommunication; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class SubActivity2 extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.subactivity2); Button btnReturn = (Button)findViewById(R.id.btn_return); btnReturn.setOnClickListener(new OnClickListener(){ public void onClick(View view){ setResult(RESULT_CANCELED, null); finish(); } }); } }
BroadcastReceiverDemoActivity.javadom
package edu.hrbeu.BroadcastReceiverDemo; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; public class BroadcastReceiverDemoActivity extends Activity { private EditText entryText ; private Button button; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); entryText = (EditText)findViewById(R.id.entry); button = (Button)findViewById(R.id.btn); button.setOnClickListener(new OnClickListener(){ public void onClick(View view){ Intent intent = new Intent("HELLO"); intent.putExtra("message", entryText.getText().toString()); sendBroadcast(intent); } }); } }
MyBroadcastReceiver.javaide
package edu.hrbeu.BroadcastReceiverDemo; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.widget.Toast; public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String msg = intent.getStringExtra("message"); Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); } }
IntentDemoActivity.javaui
package edu.hrbeu.IntentDemo; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class IntentDemoActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button)findViewById(R.id.btn); button.setOnClickListener(new OnClickListener(){ public void onClick(View view){ Intent intent = new Intent(IntentDemoActivity.this, NewActivity.class); startActivity(intent); } }); } }
NewActivity.javathis
package edu.hrbeu.IntentDemo; import android.app.Activity; import android.os.Bundle; public class NewActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_2); } }
IntentResutionDemoActivity.java編碼
package edu.hrbeu.IntentResolutionDemo; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class IntentResolutionDemoActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button)findViewById(R.id.btn); button.setOnClickListener(new OnClickListener(){ public void onClick(View view){ Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("schemodemo://edu.hrbeu/path")); startActivity(intent); } }); } }
NewActivity.java
package edu.hrbeu.IntentResolutionDemo; import android.app.Activity; import android.os.Bundle; public class NewActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_2); } }
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="edu.hrbeu.IntentResolutionDemo" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="14" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:label="@string/app_name" android:name=".IntentResolutionDemoActivity" > <intent-filter > <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".NewActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="schemodemo" android:host="edu.hrbeu" /> </intent-filter> </activity> </application> </manifest>
a.aidl
package ImplicityRandomServiceDemo; interface a{ long add(long b1,long b2); }
ImplicityRandomServiceDemoActivity.java
package edu.hrbeu.ImplicityRandomServiceDemo; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; public class ImplicityRandomServiceDemoActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button startButton = (Button)findViewById(R.id.start); Button stopButton = (Button)findViewById(R.id.stop); final Intent serviceIntent = new Intent(); serviceIntent.setAction("hh1"); startButton.setOnClickListener(new Button.OnClickListener(){ public void onClick(View view){ startService(serviceIntent); } }); stopButton.setOnClickListener(new Button.OnClickListener(){ public void onClick(View view){ stopService(serviceIntent); } }); } }
RandomService.java
package edu.hrbeu.ImplicityRandomServiceDemo; import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.widget.Toast; public class RandomService extends Service{ @Override public void onCreate() { super.onCreate(); Toast.makeText(this, "(1) 調用onCreate()", Toast.LENGTH_LONG).show(); } @Override public void onStart(Intent intent, int startId) { super.onStart(intent, startId); Toast.makeText(this, "(2) 調用onStart()", Toast.LENGTH_SHORT).show(); double randomDouble = Math.random(); String msg = "隨機數:"+ String.valueOf(randomDouble); Toast.makeText(this,msg, Toast.LENGTH_SHORT).show(); } @Override public void onDestroy() { super.onDestroy(); Toast.makeText(this, "(3) 調用onDestroy()", Toast.LENGTH_SHORT).show(); } @Override public IBinder onBind(Intent intent) { return null; } }
RemoteMathCallerDemoActivity.java
package edu.hrbeu.RemoteMathCallerDemo; import edu.hrbeu.RemoteMathServiceDemo.IMathService; import android.app.Activity; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; import android.os.RemoteException; import android.view.View; import android.widget.Button; import android.widget.TextView; public class RemoteMathCallerDemoActivity extends Activity { private IMathService mathService; private ServiceConnection mConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { mathService = IMathService.Stub.asInterface(service); } @Override public void onServiceDisconnected(ComponentName name) { mathService = null; } }; private boolean isBound = false; TextView labelView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); labelView = (TextView)findViewById(R.id.label); Button bindButton = (Button)findViewById(R.id.bind); Button unbindButton = (Button)findViewById(R.id.unbind); Button computButton = (Button)findViewById(R.id.compute_add); bindButton.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { if(!isBound){ final Intent serviceIntent = new Intent(); serviceIntent.setAction("edu.hrbeu.RemoteMathServiceDemo.MathService"); bindService(serviceIntent,mConnection,Context.BIND_AUTO_CREATE); isBound = true; } } }); unbindButton.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { if(isBound){ isBound = false; unbindService(mConnection); mathService = null; } } }); computButton.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { if (mathService == null){ labelView.setText("δ��Զ�̷���"); return; } long a = Math.round(Math.random()*100); long b = Math.round(Math.random()*100); long result = 0; try { result = mathService.Add(a, b); } catch (RemoteException e) { e.printStackTrace(); } String msg = String.valueOf(a)+" + "+String.valueOf(b)+ " = "+String.valueOf(result); labelView.setText(msg); } }); } }
IMathService.aidl
package edu.hrbeu.RemoteMathServiceDemo; interface IMathService { long Add(long a, long b); }
xml:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="edu.hrbeu.RemoteMathCallerDemo" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="14" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:label="@string/app_name" android:name=".RemoteMathCallerDemoActivity" > <intent-filter > <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
contentProvider.java
package edu.hrbeu.ContentProviderDemo; import android.content.ContentProvider; import android.content.ContentUris; import android.content.ContentValues; import android.content.Context; import android.content.UriMatcher; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteQueryBuilder; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.net.Uri; public class PeopleProvider extends ContentProvider{ private static final String DB_NAME = "people.db"; private static final String DB_TABLE = "peopleinfo"; private static final int DB_VERSION = 1; private SQLiteDatabase db; private DBOpenHelper dbOpenHelper; private static final int MULTIPLE_PEOPLE = 1; private static final int SINGLE_PEOPLE = 2; private static final UriMatcher uriMatcher; static { uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); uriMatcher.addURI(People.AUTHORITY, People.PATH_MULTIPLE, MULTIPLE_PEOPLE); uriMatcher.addURI(People.AUTHORITY, People.PATH_SINGLE, SINGLE_PEOPLE); } @Override public String getType(Uri uri) { switch(uriMatcher.match(uri)){ case MULTIPLE_PEOPLE: return People.MINE_TYPE_MULTIPLE; case SINGLE_PEOPLE: return People.MINE_TYPE_SINGLE; default: throw new IllegalArgumentException("Unkown uri:"+uri); } } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { int count = 0; switch(uriMatcher.match(uri)){ case MULTIPLE_PEOPLE: count = db.delete(DB_TABLE, selection, selectionArgs); break; case SINGLE_PEOPLE: String segment = uri.getPathSegments().get(1); count = db.delete(DB_TABLE, People.KEY_ID + "=" + segment, selectionArgs); break; default: throw new IllegalArgumentException("Unsupported URI:" + uri); } getContext().getContentResolver().notifyChange(uri, null); return count; } @Override public Uri insert(Uri uri, ContentValues values) { long id = db.insert(DB_TABLE, null, values); if ( id > 0 ){ Uri newUri = ContentUris.withAppendedId(People.CONTENT_URI, id); getContext().getContentResolver().notifyChange(newUri, null); return newUri; } throw new SQLException("Failed to insert row into " + uri); } @Override public boolean onCreate() { Context context = getContext(); dbOpenHelper = new DBOpenHelper(context, DB_NAME, null, DB_VERSION); db = dbOpenHelper.getWritableDatabase(); if (db == null) return false; else return true; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); qb.setTables(DB_TABLE); switch(uriMatcher.match(uri)){ case SINGLE_PEOPLE: qb.appendWhere(People.KEY_ID + "=" + uri.getPathSegments().get(1)); break; default: break; } Cursor cursor = qb.query(db, projection, selection, selectionArgs, null, null, sortOrder); cursor.setNotificationUri(getContext().getContentResolver(), uri); return cursor; } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { int count; switch(uriMatcher.match(uri)){ case MULTIPLE_PEOPLE: count = db.update(DB_TABLE, values, selection, selectionArgs); break; case SINGLE_PEOPLE: String segment = uri.getPathSegments().get(1); count = db.update(DB_TABLE, values, People.KEY_ID+"="+segment, selectionArgs); break; default: throw new IllegalArgumentException("Unknow URI:" + uri); } getContext().getContentResolver().notifyChange(uri, null); return count; } private static class DBOpenHelper extends SQLiteOpenHelper { public DBOpenHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); } private static final String DB_CREATE = "create table " + DB_TABLE + " (" + People.KEY_ID + " integer primary key autoincrement, " + People.KEY_NAME+ " text not null, " + People.KEY_AGE+ " integer," + People.KEY_HEIGHT + " float);"; @Override public void onCreate(SQLiteDatabase _db) { _db.execSQL(DB_CREATE); } @Override public void onUpgrade(SQLiteDatabase _db, int _oldVersion, int _newVersion) { _db.execSQL("DROP TABLE IF EXISTS " + DB_TABLE); onCreate(_db); } } }
People.java
package edu.hrbeu.ContentProviderDemo; import android.net.Uri; public class People{ public static final String MIME_DIR_PREFIX = "vnd.android.cursor.dir"; public static final String MIME_ITEM_PREFIX = "vnd.android.cursor.item"; public static final String MINE_ITEM = "vnd.hrbeu.people"; public static final String MINE_TYPE_SINGLE = MIME_ITEM_PREFIX + "/" + MINE_ITEM; public static final String MINE_TYPE_MULTIPLE = MIME_DIR_PREFIX + "/" + MINE_ITEM; public static final String AUTHORITY = "edu.hrbeu.peopleprovider"; public static final String PATH_SINGLE = "people/#"; public static final String PATH_MULTIPLE = "people"; public static final String CONTENT_URI_STRING = "content://" + AUTHORITY + "/" + PATH_MULTIPLE; public static final Uri CONTENT_URI = Uri.parse(CONTENT_URI_STRING); public static final String KEY_ID = "_id"; public static final String KEY_NAME = "name"; public static final String KEY_AGE = "age"; public static final String KEY_HEIGHT = "height"; }
ContentResolverDemoActivtiy.java
People.java同上
DBAdapter.java
package edu.hrbeu.SQLiteDemo; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteException; import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteDatabase.CursorFactory; public class DBAdapter { private static final String DB_NAME = "people.db"; private static final String DB_TABLE = "peopleinfo"; private static final int DB_VERSION = 1; public static final String KEY_ID = "_id"; public static final String KEY_NAME = "name"; public static final String KEY_AGE = "age"; public static final String KEY_HEIGHT = "height"; private SQLiteDatabase db; private final Context context; private DBOpenHelper dbOpenHelper; public DBAdapter(Context _context) { context = _context; } /** Close the database */ public void close() { if (db != null){ db.close(); db = null; } } /** Open the database */ public void open() throws SQLiteException { dbOpenHelper = new DBOpenHelper(context, DB_NAME, null, DB_VERSION); try { db = dbOpenHelper.getWritableDatabase(); } catch (SQLiteException ex) { db = dbOpenHelper.getReadableDatabase(); } } public long insert(People people) { ContentValues newValues = new ContentValues(); newValues.put(KEY_NAME, people.Name); newValues.put(KEY_AGE, people.Age); newValues.put(KEY_HEIGHT, people.Height); return db.insert(DB_TABLE, null, newValues); } public People[] queryAllData() { Cursor results = db.query(DB_TABLE, new String[] { KEY_ID, KEY_NAME, KEY_AGE, KEY_HEIGHT}, null, null, null, null, null); return ConvertToPeople(results); } public People[] queryOneData(long id) { Cursor results = db.query(DB_TABLE, new String[] { KEY_ID, KEY_NAME, KEY_AGE, KEY_HEIGHT}, KEY_ID + "=" + id, null, null, null, null); return ConvertToPeople(results); } private People[] ConvertToPeople(Cursor cursor){ int resultCounts = cursor.getCount(); if (resultCounts == 0 || !cursor.moveToFirst()){ return null; } People[] peoples = new People[resultCounts]; for (int i = 0 ; i<resultCounts; i++){ peoples[i] = new People(); peoples[i].ID = cursor.getInt(0); peoples[i].Name = cursor.getString(cursor.getColumnIndex(KEY_NAME)); peoples[i].Age = cursor.getInt(cursor.getColumnIndex(KEY_AGE)); peoples[i].Height = cursor.getFloat(cursor.getColumnIndex(KEY_HEIGHT)); cursor.moveToNext(); } return peoples; } public long deleteAllData() { return db.delete(DB_TABLE, null, null); } public long deleteOneData(long id) { return db.delete(DB_TABLE, KEY_ID + "=" + id, null); } public long updateOneData(long id , People people){ ContentValues updateValues = new ContentValues(); updateValues.put(KEY_NAME, people.Name); updateValues.put(KEY_AGE, people.Age); updateValues.put(KEY_HEIGHT, people.Height); return db.update(DB_TABLE, updateValues, KEY_ID + "=" + id, null); } /** 靜態Helper類,用於創建、更新和打開數據庫*/ private static class DBOpenHelper extends SQLiteOpenHelper { public DBOpenHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); } private static final String DB_CREATE = "create table " + DB_TABLE + " (" + KEY_ID + " integer primary key autoincrement, " + KEY_NAME+ " text not null, " + KEY_AGE+ " integer," + KEY_HEIGHT + " float);"; @Override public void onCreate(SQLiteDatabase _db) { _db.execSQL(DB_CREATE); } @Override public void onUpgrade(SQLiteDatabase _db, int _oldVersion, int _newVersion) { _db.execSQL("DROP TABLE IF EXISTS " + DB_TABLE); onCreate(_db); } } }
People.java
package edu.hrbeu.SQLiteDemo; public class People { public int ID = -1; public String Name; public int Age; public float Height; @Override public String toString(){ String result = ""; result += "ID:" + this.ID + ","; result += "姓名:" + this.Name + ","; result += "年齡:" + this.Age + ", "; result += "身高:" + this.Height + ","; return result; } }
SQLiteDemoActivity.java
package edu.hrbeu.SQLiteDemo; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class SQLiteDemoActivity extends Activity { /** Called when the activity is first created. */ private DBAdapter dbAdepter ; private EditText nameText; private EditText ageText; private EditText heightText; private EditText idEntry; private TextView labelView; private TextView displayView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); nameText = (EditText)findViewById(R.id.name); ageText = (EditText)findViewById(R.id.age); heightText = (EditText)findViewById(R.id.height); idEntry = (EditText)findViewById(R.id.id_entry); labelView = (TextView)findViewById(R.id.label); displayView = (TextView)findViewById(R.id.display); Button addButton = (Button)findViewById(R.id.add); Button queryAllButton = (Button)findViewById(R.id.query_all); Button clearButton = (Button)findViewById(R.id.clear); Button deleteAllButton = (Button)findViewById(R.id.delete_all); Button queryButton = (Button)findViewById(R.id.query); Button deleteButton = (Button)findViewById(R.id.delete); Button updateButton = (Button)findViewById(R.id.update); addButton.setOnClickListener(addButtonListener); queryAllButton.setOnClickListener(queryAllButtonListener); clearButton.setOnClickListener(clearButtonListener); deleteAllButton.setOnClickListener(deleteAllButtonListener); queryButton.setOnClickListener(queryButtonListener); deleteButton.setOnClickListener(deleteButtonListener); updateButton.setOnClickListener(updateButtonListener); dbAdepter = new DBAdapter(this); dbAdepter.open(); } OnClickListener addButtonListener = new OnClickListener() { @Override public void onClick(View v) { People people = new People(); people.Name = nameText.getText().toString(); people.Age = Integer.parseInt(ageText.getText().toString()); people.Height = Float.parseFloat(heightText.getText().toString()); long colunm = dbAdepter.insert(people); if (colunm == -1 ){ labelView.setText("添加過程錯誤!"); } else { labelView.setText("成功添加數據,ID:"+String.valueOf(colunm)); } } }; OnClickListener queryAllButtonListener = new OnClickListener() { @Override public void onClick(View v) { People[] peoples = dbAdepter.queryAllData(); if (peoples == null){ labelView.setText("數據庫中沒有數據"); return; } labelView.setText("數據庫:"); String msg = ""; for (int i = 0 ; i<peoples.length; i++){ msg += peoples[i].toString()+"\n"; } displayView.setText(msg); } }; OnClickListener clearButtonListener = new OnClickListener() { @Override public void onClick(View v) { displayView.setText(""); } }; OnClickListener deleteAllButtonListener = new OnClickListener() { @Override public void onClick(View v) { dbAdepter.deleteAllData(); String msg = "數據所有刪除"; labelView.setText(msg); } }; OnClickListener queryButtonListener = new OnClickListener() { @Override public void onClick(View v) { int id = Integer.parseInt(idEntry.getText().toString()); People[] peoples = dbAdepter.queryOneData(id); if (peoples == null){ labelView.setText("數據庫中沒有ID爲"+String.valueOf(id)+"的數據"); return; } labelView.setText("數據庫:"); displayView.setText(peoples[0].toString()); } }; OnClickListener deleteButtonListener = new OnClickListener() { @Override public void onClick(View v) { long id = Integer.parseInt(idEntry.getText().toString()); long result = dbAdepter.deleteOneData(id); String msg = "刪除ID爲"+idEntry.getText().toString()+"的數據" + (result>0?"成功":"失敗"); labelView.setText(msg); } }; OnClickListener updateButtonListener = new OnClickListener() { @Override public void onClick(View v) { People people = new People(); people.Name = nameText.getText().toString(); people.Age = Integer.parseInt(ageText.getText().toString()); people.Height = Float.parseFloat(heightText.getText().toString()); long id = Integer.parseInt(idEntry.getText().toString()); long count = dbAdepter.updateOneData(id, people); if (count == -1 ){ labelView.setText("更新錯誤!"); } else { labelView.setText("更新成功,更新數據"+String.valueOf(count)+"條"); } } }; }