Java SQlite delete函数没有删除条目

Java SQlite delete函数没有删除条目,java,android,Java,Android,在我的应用程序正在使用的数据库中,我很难删除单个项目。我知道该方法会被调用,但列表中的任何内容都不会被删除。我没有收到任何使追踪变得困难的错误。援助将是了不起的 public class MainActivity extends Activity{ //Global Variables ListView lv; Intent addM, viewM; public DBAdapter movieDatabase; String tempTitle, tempYear; int request_

在我的应用程序正在使用的数据库中,我很难删除单个项目。我知道该方法会被调用,但列表中的任何内容都不会被删除。我没有收到任何使追踪变得困难的错误。援助将是了不起的

public class MainActivity extends Activity{

//Global Variables
ListView lv;
Intent addM, viewM;
public DBAdapter movieDatabase;
String tempTitle, tempYear;
int request_Code = 1;
int request_code2 = 2;
SimpleCursorAdapter dataAdapter;
Cursor cursor;
Button addButton;
long testID;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);



    //creates the database
    movieDatabase = new DBAdapter(this);
    movieDatabase.open();
    //movieDatabase.deleteAllMovies();


    //creates the intents to start the sub activities
    addM = new Intent(this, AddMovie.class);
    viewM = new Intent(this, MovieView.class);


    }
        //handles the return of the activity addMovie
        public void onActivityResult(int requestCode, int resultCode,    
Intent data)
        {
            super.onActivityResult(requestCode, resultCode, data);

            if(resultCode == RESULT_OK)
            {
                switch(requestCode)
                {
                case 1:
                    dbAddMovie(data.getStringExtra("title"), 
data.getStringExtra("year"));
                    break;
                case 2:
                    testID = data.getLongExtra("rowid", -1);
                    dMovie(testID);
                    break;
                }
            }

        }
        //adds item to the movie list
        public void dbAddMovie(String mT, String mY)
        {
            movieDatabase.open();
            movieDatabase.insertMovie(mT, mY);
            Toast.makeText(this, "Movie: " + mT + " added to database",    
Toast.LENGTH_SHORT).show();
        }

        //deletes an entry into the database
        public void dMovie(long rowid)
        {
            //Toast.makeText(this, "Deleting: " + rowid,   
Toast.LENGTH_SHORT).show();
            movieDatabase.deleteMovie(rowid);
            movieDatabase.getAllMovies();
        }

        //displays the database as a list
        public void displayListView()
        {
            addButton = (Button) findViewById(R.id.add);
            addButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                    startActivityForResult(addM, 1);    
                }
            });

            cursor = movieDatabase.getAllMovies();

             //columns to use
            String[] columns = new String[]
                    {
                    movieDatabase.KEY_TITLE,
                    };

            //xml data to bind the data to
            int[] to = new int[]
                    {
                    R.id.column2,
                    };

            //adapter to display the database as a list
            dataAdapter = new SimpleCursorAdapter(this,    
R.layout.complexrow, cursor, columns, to, 0);

            //gets the List view resource
            lv = (ListView) findViewById(R.id.movielist);

            //sets the list view to use the adapter
            lv.setAdapter(dataAdapter);

            //handles the list click events
            lv.setOnItemClickListener(new    
AdapterView.OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> parent, View 
v, int position,
                        long id) {

                    Cursor cursor = (Cursor) 
parent.getItemAtPosition(position);
                    Bundle mDet = new Bundle();
                    mDet.putString("title", 
cursor.getString(cursor.getColumnIndex(movieDatabase.KEY_TITLE)));
                    mDet.putString("year", 
cursor.getString(cursor.getColumnIndex(movieDatabase.KEY_YEAR)));
                    mDet.putInt("rId", position);
                    viewM.putExtras(mDet);
                    startActivityForResult(viewM, 2);
                }
            });
            //dataAdapter.notifyDataSetChanged();

        }   


        public void onResume()
        {
            super.onResume();
            displayListView();
        }
}

我假设
KEY\u ROWID
实际上是列的名称?请尝试以下操作:

public boolean deleteMovie(long rowID)
{
    return db.delete(DATABASE_TABLE, KEY_ROWID + "=?", new String[] { String.valueOf(rowID) }) >-1;
}

我假设
KEY\u ROWID
实际上是列的名称?请尝试以下操作:

public boolean deleteMovie(long rowID)
{
    return db.delete(DATABASE_TABLE, KEY_ROWID + "=?", new String[] { String.valueOf(rowID) }) >-1;
}
  • 您正在使用从listview返回的
    位置
    作为数据库中的行id。这不一定与数据库中自动递增的
    “\u id”
    匹配<代码>位置就是它在列表中的位置

  • 您可能需要考虑使用
    movieDatabase.KEY\u ROWID
    作为您想要的密钥。现在我看到了
    “rowid”
    “rId”
    “id”
    ,和
    键rowid
    的混合。当引用同一事物时,在任何地方使用相同的键都会使事情变得简单

  • 看起来您一直在向
    viewM
    intent添加捆绑包。这是真的吗?如果这不是您的意图,您应该为每次单击创建一个新的意图,或者首先删除以前的捆绑包

      • 您正在使用从listview返回的
        位置
        作为数据库中的行id。这不一定与数据库中自动递增的
        “\u id”
        匹配<代码>位置就是它在列表中的位置

      • 您可能需要考虑使用
        movieDatabase.KEY\u ROWID
        作为您想要的密钥。现在我看到了
        “rowid”
        “rId”
        “id”
        ,和
        键rowid
        的混合。当引用同一事物时,在任何地方使用相同的键都会使事情变得简单

      • 看起来您一直在向
        viewM
        intent添加捆绑包。这是真的吗?如果这不是您的意图,您应该为每次单击创建一个新的意图,或者首先删除以前的捆绑包


      你说你知道有人叫它。。。调用时,
      testID
      /
      rowid
      的值是多少?它取决于我单击的元素。我在dMovie中有一个toast项,它将根据我单击的内容返回值。范围从0(如果我一直点击列表中的第一项)到最后一项。您可以从DBAdapter类中发布更多的代码吗?我假设它扩展了SQLiteOpenHelper?最重要的是,你是在调用getWritableDatabase(),而不是getReadableDatabase()?用我的整个班级编辑原始问题你说你知道它会被调用。。。调用时,
      testID
      /
      rowid
      的值是多少?它取决于我单击的元素。我在dMovie中有一个toast项,它将根据我单击的内容返回值。范围从0(如果我一直点击列表中的第一项)到最后一项。您可以从DBAdapter类中发布更多的代码吗?我假设它扩展了SQLiteOpenHelper?最重要的是,您是在调用getWritableDatabase(),而不是getReadableDatabase()?用我的整个Classic编辑原始问题我刚刚注意到类似的情况。我卸载了应用程序并重新安装了它。我点击了一个项目,是我列表中的第三个。它应该是rowid3,我点击delete,它删除了rowid0处的项目,现在不会再这样做了,所以我认为这是其中的一部分。+1,很好的建议。第一点尤其关键。onItemClick甚至为您提供了一个ID,由于您使用的是SimpleCursorAdapter,它应该为您提供数据库中相应的ID。因此,替换
      mDet.putin(“rId”,位置)带有
      mDet.putLong(“rId”,id)。我刚刚注意到类似的事情。我卸载了应用程序并重新安装了它。我点击了一个项目,是我列表中的第三个。它应该是rowid3,我点击delete,它删除了rowid0处的项目,现在不会再这样做了,所以我认为这是其中的一部分。+1,很好的建议。第一点尤其关键。onItemClick甚至为您提供了一个ID,由于您使用的是SimpleCursorAdapter,它应该为您提供数据库中相应的ID。因此,替换
      mDet.putin(“rId”,位置)带有
      mDet.putLong(“rId”,id)