Java 如何删除SQLite和listview中的数据

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

这是我的主要活动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.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?