java - 从 SQLite 数据库删除数据时,应用程序需要重新启动才能实际删除

标签 java android sqlite

目前,我正在尝试创建一个电话簿应用程序,当单击删除按钮时,该应用程序将删除屏幕上显示的 SQLite 数据库中的条目。但是,当我单击删除按钮时,该方法会运行,但数据仍保留在 sql 数据库表中,直到我重新启动正在使用的模拟器。重新启动时,数据表已自行更新,并且我的“下一步”和“上一步”按钮不会拾取之前删除的数据。

有谁知道这是为什么吗?我将放置一些相关代码..

public void Deletedata (View view)
    {
        int dRow;
        dRow = Integer.parseInt((cursor.getString(0)));
        db.deleteRecord(dRow);      
        Toast.makeText(this, "Contact Deleted", Toast.LENGTH_LONG).show();
        Nextdata(view);             


    }

public void DisplayRecord(Cursor c)
    {


        EditText nameTxt = (EditText)findViewById(R.id.Name);
        EditText phoneTxt = (EditText)findViewById(R.id.Phone);
        EditText emailTxt = (EditText)findViewById(R.id.Email);

        if (c!= null)
        {
        nameTxt.setText(c.getString(1));
        phoneTxt.setText(c.getString(2));
        emailTxt.setText(c.getString(3));
        }

    }





    public void Nextdata (View view)
    {

        if (cursor.moveToNext())
        { 
            DisplayRecord(cursor);
        }
        else
        {
            Toast.makeText(this, "Last Entry in Phone Book", Toast.LENGTH_LONG).show();
            Previousdata(view);
        }




    }

    public void Previousdata (View view)
    {
        if (cursor.moveToPrevious())
        { 
            DisplayRecord(cursor);
        }
        else
        {
            Toast.makeText(this, "First Entry in Phone Book", Toast.LENGTH_LONG).show();
            Nextdata(view);
        }

这段代码位于我的 DBAdaptor 类中,

public boolean deleteRecord(long rowId)

    {
        return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;


    }



public Cursor getAllRecords() 

    {       
        Cursor gaRecords = db.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_NAME,
                        KEY_PHONENUMBER, KEY_EMAIL}, null, null, null, null, null);

        gaRecords.moveToFirst();

                    return gaRecords;

    }

最佳答案

您需要刷新光标。我对您的代码的最佳猜测是:

public void Deletedata (View view)
{
    int position = cursor.getPosition();

    int dRow;
    dRow = Integer.parseInt((cursor.getString(0)));
    db.deleteRecord(dRow);      
    Toast.makeText(this, "Contact Deleted", Toast.LENGTH_LONG).show();

    // Refresh the cursor
    cursor.close();
    cursor = db.getAllRecords();
    cursor.moveToPosition(position);

    Nextdata(view);             
}

关于java - 从 SQLite 数据库删除数据时,应用程序需要重新启动才能实际删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15324790/

相关文章:

java - Intellij Idea Maven 'cannot reconnect' 错误

java - 该程序是否引入了并行执行?

android - 在两个不同的布局之上重叠 circleView

xcode - 在 Xcode 4 项目模板中包含 libsqlite3 dylib

php - SQLiteResult::numColumns 在数据库为空时返回 1 (PHP)

java - 为什么 Java 忽略 .properties 文件的第一行?

java - Android 切换按钮更改状态

android - 通知打开 Activity ,按下后退按钮,打开主要 Activity ?

android - 使用 GoogleAuthUtil 时如何获取 refreshToken

android - Android 数据库的最佳实践