Java 如何删除SQLite和listview中的数据
这是我的主要活动mycontact.java:Java 如何删除SQLite和listview中的数据,java,android,sqlite,Java,Android,Sqlite,这是我的主要活动mycontact.java: package com.example.user.ice_myemergencycontact; import android.content.Intent; import android.content.res.Resources; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.graphics.draw
package com.example.user.ice_myemergencycontact;
import android.content.Intent;
import android.content.res.Resources;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.drawable.Drawable;
import android.media.Image;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.ContextMenu;
import android.view.Display;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TableRow;
import android.widget.TextView;
import com.google.android.gms.appindexing.AppIndex;
import com.google.android.gms.common.api.GoogleApiClient;
import java.util.List;
/**
* Created by User on 20/7/2016.
*/
public class mycontacts extends AppCompatActivity {
private GoogleApiClient client;
//TextView viewName, viewPhone;
//ListView viewList;
ImageView addbtn;
dbcontact DBcontact;
SQLiteDatabase sqLiteDatabase;
Cursor cursor;
ListDataAdapter listDataAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
ListView listView;
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_contacts);
addbtn =(ImageView)findViewById(R.id.addbutton);
listView = (ListView)findViewById(R.id.listContactView);
listDataAdapter = new ListDataAdapter(getApplicationContext(), R.layout.activity_contact_list_view);
listView.setAdapter(listDataAdapter);
DBcontact = new dbcontact(getApplicationContext());
sqLiteDatabase = DBcontact.getReadableDatabase();
cursor = DBcontact.getAllContacts(sqLiteDatabase);
registerForContextMenu(listView);
if (cursor.moveToFirst()){
do {
String name, phone;
name = cursor.getString(0);
phone = cursor.getString(1);
contactdata contact = new contactdata(name, phone);
listDataAdapter.add(contact);
}while(cursor.moveToNext());
}
// ATTENTION: This was auto-generated to implement the App Indexing API.
// See https://g.co/AppIndexing/AndroidStudio for more information.
client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();
addbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(mycontacts.this, mycontacts_add.class));
finish();
}
});
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_pop_up, menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
switch (item.getItemId())
{
case R.id.call:
break;
case R.id.edit:
break;
case R.id.delete:
DBcontact.deleteItem(listDataAdapter.getItem(info.position));
listDataAdapter.deleteItem(listDataAdapter.getItem(info.position));
return true;
default:
return super.onContextItemSelected(item);
}
return super.onContextItemSelected(item);
}
@Override
public boolean onCreateOptionsMenu(Menu menu){
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_options, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.menu_home:
startActivity(new Intent(mycontacts.this, homemenu.class));
finish();
break;
case R.id.menu_about:
startActivity(new Intent(mycontacts.this, about.class));
finish();
break;
default:
return super.onOptionsItemSelected(item);
}
return true;
}
}
package com.example.user.ice_myemergencycontact;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import java.util.ArrayList;
import java.util.List;
/**
* Created by User on 9/8/2016.
*/
public class dbcontact extends SQLiteOpenHelper{
private static final String DATABASE_NAME = "CONTACT.db";
private static final int DATABASE_VERSION = 1;
private static final String CREATE_QUERY =
"CREATE TABLE " + contactdata.NewContact.TABLE_NAME + " (" +
contactdata.NewContact.NAME + " TEXT, " +
contactdata.NewContact.PHONE_NO + " TEXT);";
public dbcontact(Context context){
super(context, DATABASE_NAME, null, DATABASE_VERSION);
Log.e("DATABASE OPERATION","Database created / opened...");
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_QUERY);
Log.e("DATABASE OPERATION", "Table created...");
}
@Override
public void onUpgrade(SQLiteDatabase db, int aldVersion, int newVersion) {
}
public void addcontact(String name, String phone, SQLiteDatabase db){
ContentValues contentValues = new ContentValues();
contentValues.put(contactdata.NewContact.NAME, name);
contentValues.put(contactdata.NewContact.PHONE_NO, phone);
db.insert(contactdata.NewContact.TABLE_NAME, null, contentValues);
Log.e("DATABASE OPERATION", "One row inserted...");
}
public Cursor getAllContacts(SQLiteDatabase db){
Cursor cursor;
String[] projections = {contactdata.NewContact.NAME, contactdata.NewContact.PHONE_NO};
cursor = db.query(contactdata.NewContact.TABLE_NAME, projections, null, null, null, null, null);
return cursor;
}
public List<contactdata> getAllRecords() {
List<contactdata> recordList = new ArrayList<contactdata>();
// Select All Query
String selectQuery = "SELECT * FROM " + contactdata.NewContact.TABLE_NAME;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
// looping through all rows and adding to list
if (cursor.moveToFirst()) {
do {
contactdata retrieveContact = new contactdata();
retrieveContact.setNAME(cursor.getString(0));
retrieveContact.setPHONE_NO(cursor.getString(1));
// Adding record to list
recordList.add(retrieveContact);
} while (cursor.moveToNext());
}
// return record list
return recordList;
}
public void deleteItem(Object item){
SQLiteDatabase db = this.getWritableDatabase();
db.delete(contactdata.NewContact.TABLE_NAME, contactdata.NewContact.NAME + " = ?", new String[]{String.valueOf(item)});
db.close();
}
}
这是我的ListDataAdapter.java:
package com.example.user.ice_myemergencycontact;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
/**
* Created by User on 26/8/2016.
*/
public class ListDataAdapter extends ArrayAdapter {
List list = new ArrayList();
public ListDataAdapter(Context context, int resource) {
super(context, resource);
}
static class LayoutHandler{
TextView Name, Phone;
}
@Override
public void add(Object object) {
super.add(object);
list.add(object);
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
LayoutHandler layoutHandler;
if (row == null){
LayoutInflater layoutInflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = layoutInflater.inflate(R.layout.activity_contact_list_view, parent, false);
layoutHandler = new LayoutHandler();
layoutHandler.Name = (TextView) row.findViewById(R.id.item_name);
layoutHandler.Phone = (TextView) row.findViewById(R.id.item_phoneNo);
row.setTag(layoutHandler);
}
else{
layoutHandler = (LayoutHandler) row.getTag();
}
contactdata contact = (contactdata) this.getItem(position);
layoutHandler.Name.setText(contact.getNAME());
layoutHandler.Phone.setText(contact.getPHONE_NO());
return row;
}
public void deleteItem(Object item) {
list.remove(item);
notifyDataSetChanged();
}
}
这是我的db处理程序调用dbcontact.java:
package com.example.user.ice_myemergencycontact;
import android.content.Intent;
import android.content.res.Resources;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.drawable.Drawable;
import android.media.Image;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.ContextMenu;
import android.view.Display;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TableRow;
import android.widget.TextView;
import com.google.android.gms.appindexing.AppIndex;
import com.google.android.gms.common.api.GoogleApiClient;
import java.util.List;
/**
* Created by User on 20/7/2016.
*/
public class mycontacts extends AppCompatActivity {
private GoogleApiClient client;
//TextView viewName, viewPhone;
//ListView viewList;
ImageView addbtn;
dbcontact DBcontact;
SQLiteDatabase sqLiteDatabase;
Cursor cursor;
ListDataAdapter listDataAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
ListView listView;
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_contacts);
addbtn =(ImageView)findViewById(R.id.addbutton);
listView = (ListView)findViewById(R.id.listContactView);
listDataAdapter = new ListDataAdapter(getApplicationContext(), R.layout.activity_contact_list_view);
listView.setAdapter(listDataAdapter);
DBcontact = new dbcontact(getApplicationContext());
sqLiteDatabase = DBcontact.getReadableDatabase();
cursor = DBcontact.getAllContacts(sqLiteDatabase);
registerForContextMenu(listView);
if (cursor.moveToFirst()){
do {
String name, phone;
name = cursor.getString(0);
phone = cursor.getString(1);
contactdata contact = new contactdata(name, phone);
listDataAdapter.add(contact);
}while(cursor.moveToNext());
}
// ATTENTION: This was auto-generated to implement the App Indexing API.
// See https://g.co/AppIndexing/AndroidStudio for more information.
client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();
addbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(mycontacts.this, mycontacts_add.class));
finish();
}
});
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_pop_up, menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
switch (item.getItemId())
{
case R.id.call:
break;
case R.id.edit:
break;
case R.id.delete:
DBcontact.deleteItem(listDataAdapter.getItem(info.position));
listDataAdapter.deleteItem(listDataAdapter.getItem(info.position));
return true;
default:
return super.onContextItemSelected(item);
}
return super.onContextItemSelected(item);
}
@Override
public boolean onCreateOptionsMenu(Menu menu){
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_options, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.menu_home:
startActivity(new Intent(mycontacts.this, homemenu.class));
finish();
break;
case R.id.menu_about:
startActivity(new Intent(mycontacts.this, about.class));
finish();
break;
default:
return super.onOptionsItemSelected(item);
}
return true;
}
}
package com.example.user.ice_myemergencycontact;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import java.util.ArrayList;
import java.util.List;
/**
* Created by User on 9/8/2016.
*/
public class dbcontact extends SQLiteOpenHelper{
private static final String DATABASE_NAME = "CONTACT.db";
private static final int DATABASE_VERSION = 1;
private static final String CREATE_QUERY =
"CREATE TABLE " + contactdata.NewContact.TABLE_NAME + " (" +
contactdata.NewContact.NAME + " TEXT, " +
contactdata.NewContact.PHONE_NO + " TEXT);";
public dbcontact(Context context){
super(context, DATABASE_NAME, null, DATABASE_VERSION);
Log.e("DATABASE OPERATION","Database created / opened...");
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_QUERY);
Log.e("DATABASE OPERATION", "Table created...");
}
@Override
public void onUpgrade(SQLiteDatabase db, int aldVersion, int newVersion) {
}
public void addcontact(String name, String phone, SQLiteDatabase db){
ContentValues contentValues = new ContentValues();
contentValues.put(contactdata.NewContact.NAME, name);
contentValues.put(contactdata.NewContact.PHONE_NO, phone);
db.insert(contactdata.NewContact.TABLE_NAME, null, contentValues);
Log.e("DATABASE OPERATION", "One row inserted...");
}
public Cursor getAllContacts(SQLiteDatabase db){
Cursor cursor;
String[] projections = {contactdata.NewContact.NAME, contactdata.NewContact.PHONE_NO};
cursor = db.query(contactdata.NewContact.TABLE_NAME, projections, null, null, null, null, null);
return cursor;
}
public List<contactdata> getAllRecords() {
List<contactdata> recordList = new ArrayList<contactdata>();
// Select All Query
String selectQuery = "SELECT * FROM " + contactdata.NewContact.TABLE_NAME;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
// looping through all rows and adding to list
if (cursor.moveToFirst()) {
do {
contactdata retrieveContact = new contactdata();
retrieveContact.setNAME(cursor.getString(0));
retrieveContact.setPHONE_NO(cursor.getString(1));
// Adding record to list
recordList.add(retrieveContact);
} while (cursor.moveToNext());
}
// return record list
return recordList;
}
public void deleteItem(Object item){
SQLiteDatabase db = this.getWritableDatabase();
db.delete(contactdata.NewContact.TABLE_NAME, contactdata.NewContact.NAME + " = ?", new String[]{String.valueOf(item)});
db.close();
}
}
问题是,我可以从listview中删除数据,但它仍然没有在数据库中删除。我发现数据库中数据未被删除的主要问题是因为这种编码:
public void deleteItem(Object item){
SQLiteDatabase db = this.getWritableDatabase();
db.delete(contactdata.NewContact.TABLE_NAME,
contactdata.NewContact.NAME + " = ?",
new String[]{String.valueOf(item)});
db.close();
}
请帮我解决这个问题。tq尝试用以下内容删除db行:
String whereClause = contactdata.NewContact.NAME + "='Put Name here'";
db.delete(contactdata.NewContact.TABLE_NAME, whereClause, null);
您是否调试它以检查该项是否确实是您要删除的项;i、 e.查询是否正在执行?始终在模型类中添加id,并在deleteItem方法中传递id,而不是对象。您能告诉我如何在模型类中添加id吗?并将id传递给deleteitem?