欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android+SQLite数据库实现的生词记事本功能实例

程序员文章站 2023-12-19 10:11:52
本文实例讲述了android+sqlite数据库实现的生词记事本功能。分享给大家供大家参考,具体如下: 主activity命名为 dict: 代码如下: p...

本文实例讲述了android+sqlite数据库实现的生词记事本功能。分享给大家供大家参考,具体如下:

主activity命名为

dict:

代码如下:

package example.com.myapplication;
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.widget.button;
import android.widget.edittext;
import android.widget.toast;
import java.util.arraylist;
import java.util.hashmap;
import java.util.map;
public class dict extends activity
{
  mydatabasehelper dbhelper;
  button insert = null;
  button search = null;
  @override
  public void oncreate(bundle savedinstancestate)
  {
    super.oncreate(savedinstancestate);
    setcontentview(r.layout.activity_main);
    // 创建mydatabasehelper对象,指定数据库版本为1,此处使用相对路径即可,
    // 数据库文件自动会保存在程序的数据文件夹的databases目录下。
    dbhelper = new mydatabasehelper(this
        , "mydict.db3" , 1);
    insert = (button)findviewbyid(r.id.insert);
    search = (button)findviewbyid(r.id.search);
    insert.setonclicklistener(new view.onclicklistener()
    {
      @override
      public void onclick(view source)
      {
        //获取用户输入
        string word = ((edittext)findviewbyid(r.id.word))
            .gettext().tostring();
        string detail = ((edittext)findviewbyid(r.id.detail))
            .gettext().tostring();
        //插入生词记录
        insertdata(dbhelper.getreadabledatabase() , word , detail);
        //显示提示信息
        toast.maketext(dict.this, "添加生词成功!" , toast.length_short)
            .show();
      }
    });
    search.setonclicklistener(new view.onclicklistener()
    {
      @override
      public void onclick(view source)
      {
        // 获取用户输入
        string key = ((edittext) findviewbyid(r.id.key)).gettext()
            .tostring();
        // 执行查询
        cursor cursor = dbhelper.getreadabledatabase().rawquery(
            "select * from dict where word like ? or detail like ?",
            new string[]{"%" + key + "%" , "%" + key + "%"});
        //创建一个bundle对象
        bundle data = new bundle();
        data.putserializable("data", convercursortolist(cursor));
        //创建一个intent
        intent intent = new intent(dict.this
            , resultactivity.class);
        intent.putextras(data);
        //启动activity
        startactivity(intent);
      }
    });
  }
  protected 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>();
      //取出查询记录中第2列、第3列的值
      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});
  }
  @override
  public void ondestroy()
  {
    super.ondestroy();
    //退出程序时关闭mydatabasehelper里的sqlitedatabase
    if (dbhelper != null)
    {
      dbhelper.close();
    }
  }
}

他的布局文件activity_main代码如下:

<!--?xml version="1.0" encoding="utf-8"?-->
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical">
  <edittext
    android:id="@+id/word"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="@string/input"/>
  <edittext
    android:id="@+id/detail"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="@string/input"
    android:lines="3"/>
  <button
    android:id="@+id/insert"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/insert"/>
  <edittext
    android:id="@+id/key"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="@string/record"/>
  <button
    android:id="@+id/search"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/search"/>
  <listview
    android:id="@+id/show"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"/>
</linearlayout>

另一个需要跳转的activity命名为:

resultactivity

具体代码如下:

package example.com.myapplication;
import android.app.activity;
import android.content.intent;
import android.os.bundle;
import android.widget.listview;
import android.widget.simpleadapter;
import java.util.list;
import java.util.map;
public class resultactivity extends activity
{
  @override
  public void oncreate(bundle savedinstancestate)
  {
    super.oncreate(savedinstancestate);
    setcontentview(r.layout.popup);
    listview listview = (listview)findviewbyid(r.id.show);
    intent intent = getintent();
    //获取该intent所携带的数据
    bundle data = intent.getextras();
    //从bundle数据包中取出数据
    @suppresswarnings("unchecked")
    list<map<string,string>> list =
      (list<map<string ,string>>)data.getserializable("data");
    //将list封装成simpleadapter
    simpleadapter adapter = new simpleadapter(
        resultactivity.this , list
        , r.layout.ine , new string[]{"word" , "detail"}
        , new int[]{r.id.my_title , r.id.my_content});
    //填充listview
    listview.setadapter(adapter);
  }
}

他的布局文件命名为popup: 代码如下:

<?xml version="1.0" encoding="utf-8"?>
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:id="@+id/fragment">
  <textview
    android:id="@+id/my_title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
  <textview
    android:id="@+id/my_content"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
</linearlayout>

listview的子项目布局命名为ine:

代码如下:

<?xml version="1.0" encoding="utf-8"?>
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:id="@+id/fragment">
  <textview
    android:id="@+id/my_title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
  <textview
    android:id="@+id/my_content"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
</linearlayout>

最后数据库帮助类命名为:

mydatabasehelper:

代码如下:

package example.com.myapplication;
import android.content.context;
import android.database.sqlite.sqlitedatabase;
import android.database.sqlite.sqliteopenhelper;
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, int version)
  {
    super(context, name, null, version);
  }
  @override
  public void oncreate(sqlitedatabase db)
  {
    // 第一个使用数据库时自动建表
    db.execsql(create_table_sql);
  }
  @override
  public void onupgrade(sqlitedatabase db, int oldversion, int newversion)
  {
    system.out.println("--------onupdate called--------"
        + oldversion + "--->" + newversion);
  }
}

更多关于android相关内容感兴趣的读者可查看本站专题:《android操作sqlite数据库技巧总结》、《android数据库操作技巧总结》、《android编程之activity操作技巧总结》、《android文件操作技巧汇总》、《android开发入门与进阶教程》、《android资源操作技巧汇总》、《android视图view技巧总结》及《android控件用法总结

希望本文所述对大家android程序设计有所帮助。

上一篇:

下一篇: