这期说sqlite离线存储,最近app要加上离线文件下载的功能,自己也是弄了一天,总算是小有成果,要好好感谢老婆的大力支持,帮我测试什么的,都任劳任怨,现在能这样对我这样的好的人只有老婆了。分享代码给大家,看着一些记事本都很实用,所以也就估摸着弄了一个,UI自己设计吧,功能实现了一切都好说。下面开始:

    首先,sqlite可以去官网http://www.sqlite.org/lang.html,去查询所有进行的操作,创建表,增删改查等等。

            然后就是建一个sqlite的类继承至SQLiteOpenHelper:

package com.liangxiao.usingsqlite;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper;public class Db extends SQLiteOpenHelper {public Db(Context context, String name, CursorFactory factory, int version) {super(context, "db", null, 1);// TODO Auto-generated constructor stub}@Overridepublic void onCreate(SQLiteDatabase db) {// TODO Auto-generated method stub// db.execSQL("CREATE TABLE USER(" + "name TEXT DEFAULT \"\","// + "sex TEXT DEFAULT \"\")");db.execSQL("CREATE TABLE USER("+"_id INTEGER PRIMARY KEY AUTOINCREMENT,"+ "name TEXT DEFAULT \"\"," + "sex TEXT DEFAULT \"\")");// db.execSQL("CREATE TABLE USER(" + "name TEXT DEFAULT \"\"");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// TODO Auto-generated method stub}}

    注意:这里面的adapter我用了官方自带的方便操作了,所以需求引用表的_id ,就加了一个字段。

    然后是我给大家写了两种读取操作界面,一种是textview的读取,一种是listview的读取方式。

    先说textview,大家可以发挥想象去构造UI,什么下拉悬停,ScrollView等等。

    代码我都注释过PS:跳转窗体到MainActivity_dbRead:

package com.liangxiao.usingsqlite;import android.app.Activity;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.os.Bundle;import android.widget.TextView;public class MainActivity_dbRead extends Activity {private TextView xianshi;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main_dbread);xianshi = (TextView) findViewById(R.id.xianshi);read_db();}/** * 读取db部分 */private void read_db() {Db db = new Db(this, "db", null, 1);SQLiteDatabase dbRead = db.getReadableDatabase();Cursor c = dbRead.query("user", null, null, null, null, null, null);while (c.moveToNext()) {String name = c.getString(c.getColumnIndex("name"));String sex = c.getString(c.getColumnIndex("sex"));db_lastindex_content += "心情:" + name + "  " + "当事人:" + sex + "\n";}xianshi.setText(db_lastindex_content.toString());}private String db_lastindex_content = "";}

    注意:这个textview你可以在当前的页面显示你的操作,也可以跳转操作,都会直接显示在主UI上,没有卡顿的现象,很流畅的。

    主窗体MainActivity:

package com.liangxiao.usingsqlite;import android.app.Activity;import android.content.ContentValues;import android.content.Intent;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;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;import android.widget.Toast;public class MainActivity extends Activity implements OnClickListener {private Button btn_fly;private TextView xianshi1;private EditText add_db_text;private EditText add_db_text2;private Db db;private SQLiteDatabase dbRead, dbWrite;private Cursor c;// private String add_db_text_string;// private String add_db_text_string2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);init();read_db();}/** * 初始化部分 */private void init() {xianshi1 = (TextView) findViewById(R.id.xianshi1);btn_fly = (Button) findViewById(R.id.btn_fly);add_db_text = (EditText) findViewById(R.id.add_db_text);add_db_text2 = (EditText) findViewById(R.id.add_db_text2);btn_fly.setOnClickListener(this);}/** * 添加操作部分 */private void add_db() {String add_db_text_string = add_db_text.getText().toString();String add_db_text_string2 = add_db_text2.getText().toString();Toast.makeText(this, add_db_text_string + "," + add_db_text_string2, 2).show();db = new Db(this, "db", null, 1);dbWrite = db.getWritableDatabase();ContentValues cv = new ContentValues();cv.put("name", add_db_text_string);cv.put("sex", add_db_text_string2);dbWrite.insert("user", null, cv);dbWrite.close();}/** * 读取db部分 */private void read_db() {db = new Db(this, "db", null, 1);dbRead = db.getReadableDatabase();c = dbRead.query("user", null, null, null, null, null, null);while (c.moveToNext()) {String name = c.getString(c.getColumnIndex("name"));String sex = c.getString(c.getColumnIndex("sex"));System.out.println(String.format("name%s,sex%s", name, sex));// xianshi1.setText("心情:" + name + "  " + "当事人:" + sex + "\n");db_dateBase += "心情:" + name + "  " + "当事人:" + sex + "\n";}xianshi1.setText(db_dateBase.toString());}private String db_dateBase = "";private void refresh() {db = new Db(this, "db", null, 1);dbRead = db.getReadableDatabase();c = dbRead.query("user", null, null, null, null, null, null);while (c.moveToNext()) {String name = c.getString(c.getColumnIndex("name"));String sex = c.getString(c.getColumnIndex("sex"));System.out.println(String.format("name%s,sex%s", name, sex));// xianshi1.setText("心情:" + name + "  " + "当事人:" + sex + "\n");db_dateBase = "心情:" + name + "  " + "当事人:" + sex + "\n";}String xinshi_text_lastindex = xianshi1.getText().toString();xianshi1.setText(xinshi_text_lastindex+db_dateBase.toString());}/** * click部分 */@Overridepublic void onClick(View v) {add_db();refresh();// Intent intent = new Intent();// intent.setClass(MainActivity.this, MainActivity_dbRead.class);// MainActivity.this.startActivity(intent);// MainActivity.this.finish();}}

    注意在onClick中,我注释的部分是跳转的操作,当前的是主窗体的UI显示操作。

    两种效果如下:


    然后是对于listview的操作,大家一般都是对于这个操作多些,首先是主窗体MainActivity_ListView_db:

package com.liangxiao.usingsqlite;import android.app.AlertDialog;import android.app.ListActivity;import android.content.ContentValues;import android.content.DialogInterface;import android.content.Intent;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.os.Bundle;import android.view.KeyEvent;import android.view.View;import android.view.View.OnClickListener;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.AdapterView.OnItemLongClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.ListView;import android.widget.RelativeLayout;import android.widget.RelativeLayout.LayoutParams;import android.widget.SimpleCursorAdapter;import android.widget.TextView;import android.widget.Toast;public class MainActivity_ListView_db extends ListActivity implementsOnClickListener {private ListView list;private EditText edit_name, edit_sex;private TextView tvname, tvsex;private Button btn;private SimpleCursorAdapter adapter;private Db db;private SQLiteDatabase dbRead, dbWrite;private Cursor c;private long firstime = 0;private RelativeLayout mainLayout;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_main_listview);init();db_add_read();refreshListView();}private void init() {btn = (Button) findViewById(R.id.btn);// list = (ListView) findViewById(R.id.list);edit_name = (EditText) findViewById(R.id.edit_name);edit_sex = (EditText) findViewById(R.id.edit_sex);btn.setOnClickListener(this);}private void db_add_read() {db = new Db(this, "db", null, 1);dbRead = db.getReadableDatabase();// c = dbRead.query("user", null, null, null, null, null, null);dbWrite = db.getWritableDatabase();adapter = new SimpleCursorAdapter(this,R.layout.activity_main_listview_item, null, new String[] {"name", "sex" }, new int[] { R.id.tvname, R.id.tvsex });// list.setAdapter(adapter);setListAdapter(adapter);// 删除操作部分getListView().setOnItemLongClickListener(new OnItemLongClickListener() {@Overridepublic boolean onItemLongClick(AdapterView<?> parent, View view,final int position, long id) {new AlertDialog.Builder(MainActivity_ListView_db.this).setTitle("你妹妹").setMessage("Are you sure?").setNegativeButton("No", null).setPositiveButton("delete",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface arg0,int arg1) {// TODO Auto-generated method stubCursor c = adapter.getCursor();c.moveToPosition(position);int itemId = c.getInt(c.getColumnIndex("_id"));dbWrite.delete("user", "_id=?",new String[] { itemId + "" });refreshListView();}}).show();return true;}});// 修改部分getListView().setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {Cursor c = adapter.getCursor();c.moveToPosition(position);int itemId = c.getInt(c.getColumnIndex("_id"));Intent intent = new Intent();intent.putExtra("itemId", itemId + "");intent.setClass(MainActivity_ListView_db.this,MainActivity_ListView_db_detail.class);MainActivity_ListView_db.this.startActivity(intent);MainActivity_ListView_db.this.finish();}});}private void refreshListView() {c = dbRead.query("user", null, null, null, null, null, null);adapter.changeCursor(c);}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubif (v == btn) {ContentValues cv = new ContentValues();cv.put("name", edit_name.getText().toString());cv.put("sex", edit_sex.getText().toString());dbWrite.insert("user", null, cv);refreshListView();edit_name.getText().clear();edit_sex.getText().clear();}}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {// RelativeLayout.LayoutParams lp = (LayoutParams) mainLayout// .getLayoutParams();long secondtime = System.currentTimeMillis();if (secondtime - firstime > 3000) {Toast.makeText(MainActivity_ListView_db.this, "再按一次返回键退出",Toast.LENGTH_SHORT).show();firstime = System.currentTimeMillis();return true;} else {MainActivity_ListView_db.this.finish();System.exit(0);android.os.Process.killProcess(android.os.Process.myPid());}}return super.onKeyDown(keyCode, event);}}

    然后是编辑MainActivity_ListView_db_detail:

package com.liangxiao.usingsqlite;import android.app.Activity;import android.content.ContentValues;import android.content.Intent;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.os.Bundle;import android.view.KeyEvent;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;public class MainActivity_ListView_db_detail extends Activity {private EditText name, sex;private Button btn_update;private SQLiteDatabase dbRead, dbWrite;private String itemId;private Cursor c;private Db db;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_main_listview_detail);init();Intent intent = getIntent();itemId = intent.getStringExtra("itemId");c = dbRead.query("user", null, "_id=?", new String[] { itemId }, null,null, null);// String name1 = c.getString(c.getColumnName(1));if (c.moveToFirst()) {String name1 = c.getString(c.getColumnIndex("name"));String sex1 = c.getString(c.getColumnIndex("sex"));name.setText(name1);sex.setText(sex1);}c.close();}private void init() {db = new Db(this, "db", null, 1);dbRead = db.getReadableDatabase();dbWrite = db.getWritableDatabase();name = (EditText) findViewById(R.id.name);sex = (EditText) findViewById(R.id.sex);btn_update = (Button) findViewById(R.id.btn_update);btn_update.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View arg0) {ContentValues cv = new ContentValues();cv.put("name", name.getText().toString());cv.put("sex", sex.getText().toString());// dbWrite.insert("user", null, cv);dbWrite.update("user", cv, "_id=?", new String[] { itemId });Intent intent = new Intent(MainActivity_ListView_db_detail.this,MainActivity_ListView_db.class);MainActivity_ListView_db_detail.this.startActivity(intent);MainActivity_ListView_db_detail.this.finish();}});}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {Intent intent = new Intent(MainActivity_ListView_db_detail.this,MainActivity_ListView_db.class);MainActivity_ListView_db_detail.this.startActivity(intent);MainActivity_ListView_db_detail.this.finish();}return super.onKeyDown(keyCode, event);}}

    注意:编辑详情的有两个操作,一个是查询所在listview的id的一行记录,还有更新操作。而主窗体是读取和添加的操作。代码里面都写的比较详细,自己看吧,PS:这个里面有2个小操作,一个是listeview item点击,一个是长按,自己试试吧,效果如下图:

    

    爱老婆,爱生活,爱IT...


更多相关文章

  1. android 数据库处理及操作
  2. Android高性能编码 - 第二篇 数据库操作
  3. 一切为了更贴近系统―Android中的线程模型
  4. Android应用程序私有目录下文件操作总结
  5. 回调机制在 Android(安卓)监听用户界面操作中的体现
  6. android中如何读取已经在sqlite expert professional等sqlite工
  7. 几张SVG矢量图看明所有操作系统之间的演进关系
  8. 适配Android(安卓)Q上读取多媒体文件
  9. Vysor让你在电脑上完全控制android手机屏幕镜像

随机推荐

  1. android 4.4 电池电量管理底层分析(C\C+
  2. 下载并编译Chrome浏览器For Android
  3. Android状态栏功能介绍
  4. Android资源文件在配置文件中的使用
  5. android系统开发 AP 和 BP 简要说明
  6. android支持https通讯,交叉编译 libcurl l
  7. Android(安卓)6.0 新特性
  8. 实现base64格式的amr音频文件在IOS、andr
  9. Android客户端与服务器之间的通信
  10. 自定义View框架完全解析