首页 > 解决方案 > 单击保存按钮后,键/对值检索卡在“正在运行的活动”上

问题描述

我在 SQL 数据库中有一个课程表和课程描述表。例如

课程代码 -------- 课程名称

Engineering101 ....物理学基础

Math101 ....................微积分基础

........... ETC

我想检索课程名称的值,让我们在将课程代码Engineering101 输入到编辑文本字段后说“物理基础”描述。

我的文件在这里中断:

public void saveData(View view) {
        EditText courseCodeName, courseCodeNumber;
        courseCodeName = findViewById(R.id.course_code);
        courseCodeNumber=findViewById(R.id.course_number);
        //get course name based off of coursenumber. make sure course name field blank
        if(courseCodeName.toString()=="" |courseCodeNumber.toString()!=""){
            // get codename and course name columns
            Cursor c = db.rawQuery("SELECT _id, course_name1, course_code1 FROM contacts WHERE course_code1 like '"+courseCodeNumber+"'",
                    null);
            if(c!=null){
                if(c.moveToFirst()){
                    do{
                        final String[] courseName=c.getColumnNames();// <---BREAKS HERE
                        String m = courseName[0];
                        //String course_name=c.getString(c.getColumnNames(dBContract.MenuEntry.COLUMN_CODE));
                        Log.v("Set Correctly?", m);

                    }while(c.moveToNext());
                }
            }

是什么导致这种情况发生?它只是说“活动正在运行”,就是这样。

谢谢。

标签: androidsqlite

解决方案


通过阅读上面的评论if (...)

//get course name based off of coursenumber. make sure course name field blank

我认为应该是:

if(courseCodeName.getText().toString().trim().isEmpty() && !courseCodeNumber.getText().toString().trim().isEmpty())

然后通过使用占位符使用安全的方式查询表以避免sql注入:

Cursor c = db.rawQuery("SELECT course_name1 FROM contacts WHERE course_code1 = ?", new String[] {courseCodeNumber});

我将语句更改为 return 只是course_name1因为您对任何其他列不感兴趣并且也更改like=.
然后,我不知道你是否真的需要一个循环。您是否期望返回超过 1 行?
我不这么认为,因为我认为course_code1它是独一无二的(或不是?)。
所以这样做:

if(c.moveToFirst()){
    String course_name = c.getString(0);
    ..................................
}

推荐阅读