android sqlite问题

android sqlite问题,android,sqlite,Android,Sqlite,嘿,我最近开始了android开发,在从数据库保存/加载数据时遇到了一个问题。我对数据库类做了一些细微的修改 我的问题是我有一些编辑文本的活动。创建时,数据库中的字符串应写入编辑文本,按下按钮时,数据库中的数据应更新,活动应关闭。对于数据库为空的情况,我添加了一个带有cursor.getCount的if子句=0用于读取数据库,但此条件永远不会为真 这是我的密码 package com.gabrielisonline.timetable; public class DurationActivit

嘿,我最近开始了android开发,在从数据库保存/加载数据时遇到了一个问题。我对数据库类做了一些细微的修改

我的问题是我有一些编辑文本的活动。创建时,数据库中的字符串应写入编辑文本,按下按钮时,数据库中的数据应更新,活动应关闭。对于数据库为空的情况,我添加了一个带有cursor.getCount的if子句=0用于读取数据库,但此条件永远不会为真

这是我的密码

package com.gabrielisonline.timetable;

public class DurationActivity extends Activity {

DbAdapter dba;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.duration);

    Button saveButton = (Button) findViewById(R.id.duration_button1);
    saveButton.setOnClickListener(new SaveButtonListener());

    dba = new DbAdapter(this);
    dba.open(); 
    Cursor c = dba.fetchAllDurations();

    if (c.getCount() != 0)  {
        int i = c.getColumnIndex(DbAdapter.KEY_TIME);

        ((EditText) findViewById(R.id.duration_length)).setText(dba.fetchDuration(0).getString(i));
        ((EditText) findViewById(R.id.duration_lesson1)).setText(dba.fetchDuration(1).getString(i));
        ((EditText) findViewById(R.id.duration_lesson2)).setText(dba.fetchDuration(2).getString(i));
        ((EditText) findViewById(R.id.duration_lesson3)).setText(dba.fetchDuration(3).getString(i));
        ((EditText) findViewById(R.id.duration_lesson4)).setText(dba.fetchDuration(4).getString(i));
        ((EditText) findViewById(R.id.duration_lesson5)).setText(dba.fetchDuration(5).getString(i));
        ((EditText) findViewById(R.id.duration_lesson6)).setText(dba.fetchDuration(6).getString(i));
        ((EditText) findViewById(R.id.duration_lesson7)).setText(dba.fetchDuration(7).getString(i));
        ((EditText) findViewById(R.id.duration_lesson8)).setText(dba.fetchDuration(8).getString(i));
        ((EditText) findViewById(R.id.duration_lesson9)).setText(dba.fetchDuration(9).getString(i));
        ((EditText) findViewById(R.id.duration_lesson10)).setText(dba.fetchDuration(10).getString(i));
    }


}

public class SaveButtonListener implements OnClickListener {
    @Override
    public void onClick(View v) {

        String l = ((EditText) findViewById(R.id.duration_length)).getText().toString();
        String l1 = ((EditText) findViewById(R.id.duration_lesson1)).getText().toString();
        String l2 = ((EditText) findViewById(R.id.duration_lesson2)).getText().toString();
        String l3 = ((EditText) findViewById(R.id.duration_lesson3)).getText().toString();
        String l4 = ((EditText) findViewById(R.id.duration_lesson4)).getText().toString();
        String l5 = ((EditText) findViewById(R.id.duration_lesson5)).getText().toString();
        String l6 = ((EditText) findViewById(R.id.duration_lesson6)).getText().toString();
        String l7 = ((EditText) findViewById(R.id.duration_lesson7)).getText().toString();
        String l8 = ((EditText) findViewById(R.id.duration_lesson8)).getText().toString();
        String l9 = ((EditText) findViewById(R.id.duration_lesson9)).getText().toString();
        String l10 = ((EditText) findViewById(R.id.duration_lesson10)).getText().toString(); 

        dba.updateDuration(0,l);
        dba.updateDuration(1,l1);
        dba.updateDuration(2,l2);
        dba.updateDuration(3,l3);
        dba.updateDuration(4,l4);
        dba.updateDuration(5,l5);
        dba.updateDuration(6,l6);
        dba.updateDuration(7,l7);
        dba.updateDuration(8,l8);
        dba.updateDuration(9,l9);
        dba.updateDuration(10,l10);             

        dba.close();

        finish();
    }
}
}
谢谢你的帮助

编辑:

谢谢你们的回答,伙计们。问题是,我并没有在数据库中写什么东西。我将onClick方法中的代码更改为:

if (c.getCount() != 0)  {           
dba.updateDuration(1,l);
dba.updateDuration(2,l1);
dba.updateDuration(3,l2);
dba.updateDuration(4,l3);
dba.updateDuration(5,l4);
dba.updateDuration(6,l5);
dba.updateDuration(7,l6);
dba.updateDuration(8,l7);
dba.updateDuration(9,l8);
dba.updateDuration(10,l9);
dba.updateDuration(11,l10); 
} else {
dba.createDuration(l);
dba.createDuration(l1);
dba.createDuration(l2);
dba.createDuration(l3);
dba.createDuration(l4);
dba.createDuration(l5);
dba.createDuration(l6);
dba.createDuration(l7);
dba.createDuration(l8);
dba.createDuration(l9);
dba.createDuration(l10);
}

现在一切正常。我认为update方法对于第一次写入db createDuration就足够了,它在DbAdapter中调用数据库上的create方法,updateDuration调用update。

您是否向db写入过任何内容?你知道数据库里肯定有数据吗?如果没有,请尝试安装SQLLite浏览器,如,并查看表


这将帮助您确定问题是写入表还是读取表。如果您提供DBAdapter类,则可能会有进一步的帮助。如果光标未获取任何值,则可能意味着数据库没有任何值。我在代码中注意到的另一个错误是,将数据库值放入游标后,必须调用

c.moveToFirst();

将光标指针移动到第一条记录。如果不移动指针,则默认情况下指针指向位置-1。只有在这之后,您才能调用c.getString1来获取值。

请发布有关错误的更多详细信息。您得到了什么错误/异常?错误发生在代码中的哪一行?你在哪里向数据库写入数据?没有例外。问题是数据库从未被读取。例如,当我打开活动时,在EditText中写入内容,按save,然后重新打开活动,onCreate应将刚刚保存的字符串写入EditText,但EditText为空。我用dba.updateration编写数据。如果你愿意,我可以发布数据库代码,但正如前面所说,它与上面的链接基本相同,只是我少了一列,并更改了一些名称。