Java 行中的数据不会从表中删除

Java 行中的数据不会从表中删除,java,android,sqlite,listview,Java,Android,Sqlite,Listview,单击“删除”时,它不会删除或编辑我创建的行 所以我的主要活动是 package com.frolicfreak.bhushan.memo; import android.content.ContentValues; import android.content.Intent; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sql

单击“删除”时,它不会删除或编辑我创建的行 所以我的主要活动是

    package com.frolicfreak.bhushan.memo;

import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

import static com.frolicfreak.bhushan.memo.DatabaseHelper.Table_Name;
import static com.frolicfreak.bhushan.memo.DatabaseHelper.col1;
import static com.frolicfreak.bhushan.memo.DatabaseHelper.col2;

public class MainActivity extends AppCompatActivity implements 
View.OnClickListener{

FloatingActionButton fab;
DatabaseHelper mydb;

ListView listView;
ArrayAdapter<String> mAdapter;

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

    mydb =new DatabaseHelper(this);

    fab= (FloatingActionButton)findViewById(R.id.fab);
    fab.setOnClickListener(this);

    ListView listView = (ListView)findViewById(R.id.list);
    registerForContextMenu(listView);

}

@Override
public void onResume() {
    super.onResume();
    ArrayList<String> theList =new ArrayList<>();
    Cursor data= mydb.getAllData();
    listView = (ListView)findViewById(R.id.list);
    listView.setAdapter(null);

    if (data.getCount()==0){
        Toast.makeText(MainActivity.this,"data not inserted",Toast.LENGTH_LONG).show();
    }
    else
    {
        while(data.moveToNext()){
            theList.add(data.getString(1));
            ListAdapter listAdapter=new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,theList);
            listView.setAdapter(listAdapter);
        }
    }
}

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    if (v.getId()==R.id.list) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu, menu);
    }
}

@Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
    switch(item.getItemId()) {
        case R.id.edit:
           // int count= mydb.updaterow(getString(col2),EditText.)
            return true;
        case R.id.delete:
            int count=mydb.deleterow(getString(item.getItemId()));
            onResume();
            return true;
        default:
            return super.onContextItemSelected(item);
    }
}


@Override
public void onClick(View v) {

    Intent intent= new Intent(this,Main2Activity.class);
    startActivity(intent);

}
}
请帮助我,我是编程新手,所以我想在这里学习 先谢谢你
实际上,我也需要编辑和保存数据方面的帮助我编写了代码,但我将其保存在注释中

根据代码,您的删除功能工作正常。检查返回值是否大于0

但是您将无法在ListView中看到更改,因为您必须再次填充列表

设置
CursorAdapter
,因为您正在使用数据库链接到listview并使用
CursorAdapter.notifyDataSetChanged
()

或者创建一个方法,在发生删除时重新创建listview

ArrayList<String> COUNTRIES = new ArrayList<>();
public void refreshView() {

    MyDatabase database = new MyDatabase(ViewList.this);

    Cursor cursor = database.fetchAllData();

    COUNTRIES.clear();
    while (cursor.moveToNext()) {
        String temp = cursor.getString(cursor.getColumnIndex(database.COL1));
        COUNTRIES.add(temp);
    }
    arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, COUNTRIES);
    ListView listView = (ListView) findViewById(R.id.list);
    listView.setAdapter(arrayAdapter);

}
ArrayList COUNTRIES=new ArrayList();
公共视图(){
MyDatabase=新建MyDatabase(ViewList.this);
Cursor=database.fetchAllData();
国家。清除();
while(cursor.moveToNext()){
String temp=cursor.getString(cursor.getColumnIndex(database.COL1));
国家。添加(临时);
}
arrayAdapter=新的arrayAdapter(这是android.R.layout.simple\u list\u item\u 1,国家);
ListView ListView=(ListView)findViewById(R.id.list);
setAdapter(arrayAdapter);
}

调用onResume()方法不是一种好的编程模式。您应该将它提取到不同的方法,并在onResume()中调用它


无论如何,在本例中,
notifyDataSetChanged()
是您正在寻找的解决方案。

删除时,您正在调用此解决方案

int count=mydb.deleterow(getString(item.getItemId()));
onResume();
您没有传递所选项的id,但传递的是由getString(…)方法获取的菜单项字符串,这很奇怪。您的类中有太多未使用的代码


我建议您使用和ListView。

我应该在哪里添加它?如何在onResume()上提取它我建议,每次回到“活动”时,都要用实际项目刷新ListView,对吗?如果您确实需要它,请将您的适配器.notifyDataSetChanged()放入onResume()方法中,它就可以正常工作。
mydb.deleterow()
使用字符串作为参数。要删除的列的名称。因此,您必须在
mydb.deleterow
中传递一个字符串作为参数。虽然我对你的问题有点不清楚。请详细说明。最好是将字符串传递给delete函数。使用EditText从用户获取要删除的字符串,并将其传递到
mydb.deleterow(EditText.getText().toString())
if(mydb.deleterow(“您的字符串”)>0)//TOAST Deleted else//TOAST Not Deleted
since
db.delete(Table_Name,where子句,where rgs)
返回从数据库中删除的行数。如果返回的行数大于0,则假定删除了某一行。否则它没有。使用
android:id=“@+id/edit”
标记在XML文件中提及edittext的id,然后使用
edittext e=(edittext)findViewById(R.id.edit)初始化edittext是否已在OnCreate方法中初始化它?
ArrayList<String> COUNTRIES = new ArrayList<>();
public void refreshView() {

    MyDatabase database = new MyDatabase(ViewList.this);

    Cursor cursor = database.fetchAllData();

    COUNTRIES.clear();
    while (cursor.moveToNext()) {
        String temp = cursor.getString(cursor.getColumnIndex(database.COL1));
        COUNTRIES.add(temp);
    }
    arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, COUNTRIES);
    ListView listView = (ListView) findViewById(R.id.list);
    listView.setAdapter(arrayAdapter);

}
int count=mydb.deleterow(getString(item.getItemId()));
onResume();