天天看點

Android程式示例

Android代碼示例

目錄

    • OptionsMenu
    • ImageButton
    • CheckBox & RadioButton
    • Context Menu快捷菜單
    • Key Event
    • ListView Demo
    • Sub menu 子菜單
    • Activity Communication
    • BroadcastReceiverDemo
    • Intent Demo
    • IntentResolutionDemo
    • AIDL
    • AIDL: RemoteMathCallerDemoActivity
    • ContentProvider Demo
    • ContentResolverDemo
    • SQLite Demo

@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;
        }
    }
           

全體檔案:

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");
   }
});
           

  • checkBox
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);
           
  • RadioButton
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.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.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.java

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.java

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.java

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.java

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.java

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);
        	}
        });
    }
}
           
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);
		  }
		}
	}
           
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)+"條");	
				
			}
		}
    };

}
           

代碼改變世界