Errors404 2021-05-20 09:48 采纳率: 0%
浏览 128

用Android studio尝试SQLite的查询功能时,出现闪退情况

在使用Android studio尝试进行SQLite有关的查找功能时,我点击查找按钮就会出现闪退的情况,用爬虫逐步运行了按钮单击事件方法,运行到方法末尾也没有出现问题。我把相关代码复制在下面。

这是MainActivity的代码

private Datebase datebase;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        datebase = new Datebase(MainActivity.this,"dictionary.db",null,1);

        final EditText edt_word = (EditText)findViewById(R.id.edt_word);
        final ListView lst_trans = (ListView)findViewById(R.id.lst_trans);
        Button btn_find = (Button)findViewById(R.id.btn_find);

        btn_find.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //插入测试数据
                ContentValues values = new ContentValues();
                values.put("word","apple");
                values.put("translation","苹果");
                datebase.getReadableDatabase().insert("dictionary",null,values);
                //查询测试数据
                String key = edt_word.getText().toString();
                Cursor cursor = datebase.getReadableDatabase().query("dictionary",null,"word = ?", new String[]{key},null,null,null);
                ArrayList<Map<String, String>> result = new ArrayList<Map<String, String>>();
                while(cursor.moveToNext())
                {
                    Map<String,String> map = new HashMap<String, String>();
                    map.put("word",cursor.getString(1));
                    map.put("interpret",cursor.getString(2));
                    result.add(map);
                }
                if(result == null || result.size() == 0) {
                    Toast.makeText(MainActivity.this,"没有相关记录",Toast.LENGTH_LONG).show();
                }else {
                    SimpleAdapter simpleAdapter = new SimpleAdapter(MainActivity.this, result,
                            R.layout.activity_main,
                            new String[]{"word", "interpret"}, new int[]{
                            R.id.lst_trans});
                    lst_trans.setAdapter(simpleAdapter);
                }
            }
        });
    }

    protected void onDestroy() {
        super.onDestroy();
        if(datebase != null){
            datebase.close();
        }
    }

这是自己创建的SQLiteOpenHelper的子类

public class Datebase extends SQLiteOpenHelper {
    final String CREATE_TABLE_SQL = "create table dictionary( id integer primary key autoincrement, word varchar(255), translation varchar(255))";//创建SQL数据表的语句

    public Datebase(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, 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) {
        Log.i("数据库","版本更新"+oldVersion+"->"+newVersion);
    }
}

都是跟着网上自学的,可能有些地方看起来别扭,希望大佬们能指出来

  • 写回答

1条回答 默认 最新

  • 头发还没秃a 2021-05-20 14:12
    关注

    报什么错

    评论

报告相同问题?

悬赏问题

  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办