SQLiteOpenHelper的应用+Activity间消息传递

本文介绍如何通过SQLite实现数据持久化,并在Android应用的不同Activity间实现消息传递,具体包括创建数据表、插入、删除、更新数据及在主Activity中通过列表展示并响应用户操作。

为了学习下Activity间的消息传递,新建数据窗口采用Activity实现,当然简单点可以通过AlertDialog实现。

最终结果如下:

按menu键出现添加数据菜单选项:

点击“确定”按钮返回并将数据传回数据列表Activity

 

 

1、实现实现SQLiteOpenHelper

 

public class DatabaseHelper extends SQLiteOpenHelper 
{
	private final static String TABLE_NAME = "todo_table";
	public final static String FIELD_ID = "_id";
	public final static String FIELD_NUM = "todo_num";
	public final static String FIELD_TEXT = "todo_text";
	
	private final static int DATABASE_VERSION = 1;
	
	/**
	*DatabaseHelper(Context context, String name, CursorFactory factory,
	*int version)
	*name数据库名,factory一般传入null,否则为默认数据库,version数据库版本号
	*/	
	public DatabaseHelper(Context context) 
	{
		super(context, TABLE_NAME, null, DATABASE_VERSION);
	}

	/* 创建一个表 */
	public void onCreate(SQLiteDatabase db) 
	{
		String sql = "CREATE TABLE todo_table(_id integer primary key autoincrement,todo_num INTERGER,todo_text text)";
		db.execSQL(sql);
	}

	/* 升级数据库 */
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
	{
		String sql = "DROP TABLE IF EXISTS " + TABLE_NAME;
		db.execSQL(sql);
		onCreate(db);
	}
	
	//获得游标
	public Cursor getCursor() 
	{
		SQLiteDatabase db = this.getReadableDatabase();
		Cursor cursor = db
				.query(TABLE_NAME, null, null, null, null, null, null);
		return cursor;
	}
	
	//插入数据
	public long insert(int num ,String text) 
	{
		SQLiteDatabase db = this.getWritableDatabase();
		ContentValues cv = new ContentValues();
		cv.put(FIELD_NUM, num);
		cv.put(FIELD_TEXT, text);
		long row = db.insert(TABLE_NAME, null, cv);
		return row;
	}
	
	//删除数据
	public void delete(int id) 
	{
		SQLiteDatabase db = this.getWritableDatabase();
		db.delete(TABLE_NAME, FIELD_ID + " = ?", new String[]{Integer.toString(id)});
	}
	
	//更新数据
	public void update(int id, int num, String text) 
	{
		SQLiteDatabase db = this.getWritableDatabase();
		String where = FIELD_ID + " = ?";
		String[] whereValue = { Integer.toString(id) };
		ContentValues cv = new ContentValues();
		cv.put(FIELD_NUM, num);
		cv.put(FIELD_TEXT, text);
		db.update(TABLE_NAME, cv, where, whereValue);
	}

}


 

2、数据列表Activity

public class MainActivity extends Activity 
{
	ListView lv = null;
	
	private DatabaseHelper dbh;
	private Cursor myCursor;
	
	//当前选择的数据的_id
	int selectId;
	
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        dbh = new DatabaseHelper(this);
        /* 取得DataBase里的数据 */
	    myCursor = dbh.getCursor();
	    
	    //实例化listview
        lv = (ListView) findViewById(R.id.listview);
        
	    /*new SimpleCursorAdapter并将myCursor传入,
	       显示数据的字段为todo_text */
	    SimpleCursorAdapter adapter = 
	    new SimpleCursorAdapter
	    (this, android.R.layout.simple_list_item_2, myCursor, new String[]
	        { DatabaseHelper.FIELD_NUM , DatabaseHelper.FIELD_TEXT }, new int[]
	        { android.R.id.text1 , android.R.id.text2 });
	    lv.setAdapter(adapter);
        
        //点击监听
        lv.setOnItemClickListener(new OnItemClickListener() 
        {
        	final String[] menu = {"返回","删除","编辑"};
			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
					long arg3) 
			{
				selectId = (int) arg3;
				//获取点击项的num、text信息
				myCursor.moveToPosition(arg2);
				int numColumn = myCursor.getColumnIndex("todo_table."+DatabaseHelper.FIELD_NUM);
	    	    int textColumn = myCursor.getColumnIndex("todo_table."+DatabaseHelper.FIELD_TEXT);
	    	    final int num = myCursor.getInt(numColumn);
	    	    final String text = myCursor.getString(textColumn); 
	    	    //显示
	    	    Log.i("selectINFO", ""+num+text);
	    	    
				new AlertDialog.Builder(MainActivity.this).setTitle("操作")
				.setItems(menu, new DialogInterface.OnClickListener() 
				{
					public void onClick(DialogInterface dialog, int which) 
					{
						switch (which) 
						{
						case 0:
							
							break;
						case 1:
							deleteTodo(selectId);
							break;
						case 2:
							Intent intent = new Intent(MainActivity.this, EditActivity.class);
							intent.putExtra("num", num);
							intent.putExtra("text", text);
							MainActivity.this.startActivityForResult(intent, 1);
							break;

						default:
							break;
						}
					}
				}).create().show(); 
			}
		});
    }

    //添加菜单
	public boolean onCreateOptionsMenu(Menu menu) 
	{
		menu.add(0, 0, 0, "添加");
		menu.add(0, 1, 0, "退出");
		return true;
	}
	
	//添加菜单事件
	public boolean onOptionsItemSelected(MenuItem item) 
	{
		switch (item.getItemId()) 
		{
		case 0:
			Intent intent = new Intent(this, EditActivity.class);
			this.startActivityForResult(intent, 0);
			break;
		case 1:
			this.finish();
			break;
		default:
			break;
		}
		return true;
	}
	
	//获得另一个Activity返回的数据
	protected void onActivityResult(int requestCode, int resultCode, Intent data) 
	{
		switch (resultCode) 
		{
		case RESULT_OK:
			//添加
			if(requestCode==0)
			{
				int num = data.getIntExtra("num", 0);
				String text = data.getStringExtra("text");
				addTodo(num , text);
			}
			//更新
			if(requestCode==1)
			{
				int num = data.getIntExtra("num", 0);
				String text = data.getStringExtra("text");
				editTodo(num,text);
			}
			break;

		default:
			break;
		}
	}
	
	private void editTodo(int num,String text)
	{
	    /* 修改数据 */
	    dbh.update(selectId, num, text);
	    
	    myCursor.requery();
	    
	    lv.invalidateViews();
	}
	
	private void addTodo(int num , String text)
	{
	    /* 添加数据到数据库 */
		dbh.insert(num , text);
	    /* 重新查询 */
	    myCursor.requery();
	    /* 重新整理myListView */
	    lv.invalidateViews();
	}
	
	private void deleteTodo(int id)
	{
	    /* 删除数据 */
	    dbh.delete(id);
	    /* 重新查询 */
	    myCursor.requery();
	    /* 重新整理myListView */
	    lv.invalidateViews();
	}
}


 

3、编辑或新建数据Activity

public class EditActivity extends Activity 
{
	Intent intent;
	
	EditText et1,et2;
	Button bt1;
	
	protected void onCreate(Bundle savedInstanceState) 
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.edit);
		
		//获得控件
		et1 = (EditText) findViewById(R.id.et1);
		et2 = (EditText) findViewById(R.id.et2);
		bt1 = (Button) findViewById(R.id.bt1);
		
		/* 取得Intent中的Bundle对象 */
	    intent = this.getIntent();
	    //获取传递进来的数据
	    int intentNum = intent.getIntExtra("num", 0);
	    String intentText = intent.getStringExtra("text");
	    //将获取到的数据显示在控件中
	    et2.setText(intentText);
	    if(intentNum == 0)
	    	et1.setText("");
	    else
	    	et1.setText(""+intentNum);
	    
	    //按键监听
	    bt1.setOnClickListener(new OnClickListener() 
	    {
			public void onClick(View v) 
			{
				int getnum = Integer.parseInt(et1.getText().toString());
				String gettext = et2.getText().toString();
				intent.putExtra("num", getnum);
				intent.putExtra("text", gettext);
				EditActivity.this.setResult(RESULT_OK, intent);
				EditActivity.this.finish();
			}
		});
	}
	
}


 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HelloAndroid

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值