设为首页 收藏本站
查看: 1225|回复: 0

[经验分享] Android 数据存储和IO——SQLite(三)

[复制链接]

尚未签到

发表于 2016-11-30 10:07:44 | 显示全部楼层 |阅读模式
  该实例是用户将自己不熟悉的单词添加到数据库中,当用户需要查询某个单词或是解释时,在相应的文本框中输入相应的关键词,就会出来相应的结果。
  本实例主要是用来学习,只是实现了简单的添加和模糊查询,提供一条思路。(很多Bolg上都有类似的例子,如有雷同,纯属巧合 DSC0000.gif
  上代码:
  1. 布局文件的主界面:dict_sqlite.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><EditTextandroid:id="@+id/word"android:layout_width="fill_parent"android:layout_height="wrap_content"android:focusable="true"android:hint="生词"/><EditTextandroid:id="@+id/detail"android:layout_width="fill_parent"android:layout_height="wrap_content"android:hint="生词解释" /><Buttonandroid:id="@+id/insert"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="添加生词"/>  <EditTextandroid:id="@+id/key"android:layout_width="fill_parent"android:layout_height="wrap_content"/><Buttonandroid:id="@+id/search"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="查找 "/></LinearLayout>  
2.查询结果的ListView的布局文件:popup.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><ListViewandroid:id="@+id/show_dict"android:layout_width="fill_parent"android:layout_height="fill_parent"/></LinearLayout>  
3. 查询结果中ListView中适配器的布局文件:line.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><TextViewandroid:id="@+id/textView_Result_Dict" android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="找到的单词"/><EditTextandroid:id="@+id/word_result_dict"android:layout_width="fill_parent"android:layout_height="wrap_content"/><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="解释"/><EditTextandroid:id="@+id/detail_result_dict"android:layout_width="fill_parent"android:layout_height="wrap_content"/></LinearLayout>  4. 主程序的代码:
  (1.) 自定义的SQLiteOpenHelper的子类来管理数据库的连接:MyDatabaseHelper.java:
package com.infy.configuration;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.database.sqlite.SQLiteDatabase.CursorFactory;public class MyDatabaseHelper extends SQLiteOpenHelper{final String CREATE_TABLE_SQL="create table dict(_id integer primary key autoincrement,word,detail)";public MyDatabaseHelper(Context context, String name,CursorFactory factory, int version) {super(context, name, factory, version);// TODO Auto-generated constructor stub}@Overridepublic void onCreate(SQLiteDatabase db) {// TODO Auto-generated method stub//第一个使用数据库时自动建表db.execSQL(CREATE_TABLE_SQL);}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// TODO Auto-generated method stub}}  (2.) 主界面的代码:Dict.java:
package com.infy.configuration;import java.util.ArrayList;import java.util.HashMap;import java.util.Map;import android.app.Activity;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.Toast;public class Dict extends Activity{MyDatabaseHelper dbHelper;Button insert= null;Button search = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.dict_sqlite);//创建MyDatabaseHelper对象,指定数据库版本为1,此处使用相对路径即可数据库文件会自动保存在程序的数据文件夹的database目录下dbHelper = new MyDatabaseHelper(this, "my_Dict.db3", null, 1);insert = (Button)findViewById(R.id.insert);search = (Button)findViewById(R.id.search);final EditText word = (EditText)findViewById(R.id.word);final EditText detail =(EditText)findViewById(R.id.detail);final EditText key=(EditText)findViewById(R.id.key);//插入生词的操作insert.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stub//获取用户的输入String word_user= word.getText().toString();String detail_word=detail.getText().toString();//插入生词记录insertData(dbHelper.getReadableDatabase(),word_user,detail_word);//提示信息Toast.makeText(Dict.this, "添加生词成功!", Toast.LENGTH_LONG).show();}});//收索生词的记录search.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stub//获取用户的输入String key_user = key.getText().toString();//执行查询操作Cursor cursor = dbHelper.getReadableDatabase().rawQuery("select *from dict where word like ? or detail like ?", new String[]{"%" +key_user +"%" ,"%" +key +"%"});//创建一个Bundle对象Bundle data = new Bundle();data.putSerializable("data", converCursorToList(cursor));//创建一个IntentIntent intent = new Intent(Dict.this,ResultActivity.class);intent.putExtras(data);startActivity(intent);}});}//把cursor转化成listprotected ArrayList<Map<String, String> > converCursorToList(Cursor cursor){ArrayList<Map<String, String>> result = new ArrayList<Map<String,String>>();//遍历Cursor结果集while(cursor.moveToNext()){//将结果集集中地数据存入Arraylist中Map<String,String> map = new HashMap<String, String>();map.put("word", cursor.getString(1));map.put("detail", cursor.getString(2));result.add(map);}return result;}private void insertData(SQLiteDatabase db,String word,String detail){//执行插入语句db.execSQL("insert into dict values(null,?,?)",new String[]{word,detail});}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();//退出程序时关闭MyDatabaseHelper里的SQLiterDatabseif(dbHelper != null){dbHelper.close();}}}  
(3.)查询结果的代码:ResultActivity.java
package com.infy.configuration;import java.util.List;import java.util.Map;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.widget.ListView;import android.widget.SimpleAdapter;public class ResultActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.popup);ListView listView = (ListView)findViewById(R.id.show_dict);Intent intent = getIntent();//获取该Intent中的数据Bundle data = intent.getExtras();//从Bundle数据包中获取数据@SuppressWarnings("unchecked")List<Map<String, String>> list = (List<Map<String,String>>)data.getSerializable("data");//将List封装成SimpleAdapterSimpleAdapter adapter = new SimpleAdapter(ResultActivity.this,list,R.layout.line,new String[]{"word","detail"},new int[]{R.id.word_result_dict,R.id.detail_result_dict});//填充ListViewlistView.setAdapter(adapter);}}  
上面的ResultActivity设为了对话框风格的Activitiy.以对话框的方式来显示查询结果。
  清单文件AndroidManifest.xml为:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.infy.configuration"android:versionCode="1"android:versionName="1.0"><application android:icon="@drawable/icon" android:label="@string/app_name"><activity android:name=".Dict"android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activity android:name=".ResultActivity" android:theme="@android:style/Theme.Dialog"/></application><uses-sdk android:minSdkVersion="8" /><uses-permission android:name ="android.permission.INTERENT"/></manifest>   
结果图:
  (1.)添加生词的界面:
DSC0001.png

  (2.))查询结果的界面:在查找按钮上面的文本框中输入P字母,点击查找按钮将出现如下查询结果的界面:
DSC0002.png

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-307562-1-1.html 上篇帖子: Android (SQLite 数据库与ContentProvider) 下篇帖子: android中sqlite数据库升级方案
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表