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

时间:2017-08-26 20:04:59

标签: java android sqlite listview

当我点击删除时,它不会删除或编辑我创建的行 所以 MainActivity

    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);

}
}

我的 DataBasehelper

package com.frolicfreak.bhushan.memo;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.EditText;

import java.util.ArrayList;

/**
 * Created by BHUSHAN on 24-08-2017.
*/

public class DatabaseHelper extends SQLiteOpenHelper {

public static final String Database_Name = "Memo.db";
public static final String Table_Name = "Memo";
public static final String col1 = "ID";
public static final String col2 = "data";

//DatabaseHelper mydb;

public DatabaseHelper(Context context) {

    super(context, Database_Name, null, 1);
    //mydb=new DatabaseHelper(context);
}

@Override
public void onCreate(SQLiteDatabase db) {

    db.execSQL("create table " + Table_Name + "(ID integer primary key autoincrement, data text)");

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("drop table if exists " + Table_Name);
    onCreate(db);
}

public boolean insertData(String data, String Data) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(col2, Data);
    long result = db.insert(Table_Name, null, contentValues);
    if (result==-1)
        return false;
    else
        return true;
}

public ArrayList<String> getList(){
    ArrayList<String> taskList = new ArrayList<>();
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor= db.query(Table_Name,new String[]{col1},new String(col2),null,null,null,null);
    while (cursor.moveToNext()){
        int index= cursor.getColumnIndex(col1);
        taskList.add(cursor.getString(index));
    }
    cursor.close();
    db.close();
    return taskList;
}

public Cursor getAllData() {

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor res = db.rawQuery("SELECT * FROM " + Table_Name, null);
    return res;
}


public int deleterow(String col1) {
    String whereClause = "ID = ?";
    String[] whereArgs = {String.valueOf(col1)};

    SQLiteDatabase db = this.getWritableDatabase();

    int count = db.delete(Table_Name, whereClause, whereArgs);
    db.close();
    return count;
}

 /* public int updaterow(String oldname, String newdata){
    SQLiteDatabase db= mydb.getWritableDatabase();
    ContentValues cv=new ContentValues();
    cv.put(DatabaseHelper.col2,newdata);
    String[] whereargs={oldname};
    int count = db.update(Table_Name,cv, DatabaseHelper.col2+"=?" , whereargs);
    return count;
}*/
 }

我的 Main2Activity 类,我编辑和插入数据

 package com.frolicfreak.bhushan.memo;

 import android.support.design.widget.FloatingActionButton;
 import android.support.v7.app.AppCompatActivity;
 import android.os.Bundle;
 import android.view.View;
 import android.widget.EditText;
 import android.widget.Toast;

 public class Main2Activity extends AppCompatActivity {
DatabaseHelper db;

EditText Data;
FloatingActionButton add;

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

    db = new DatabaseHelper(this);

    Data = (EditText)findViewById(R.id.edit);
    add =(FloatingActionButton)findViewById(R.id.add);

    AddData();
}

public void AddData(){
    add.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    boolean isInserted = 
 db.insertData(Data.getText().toString(),
                             Data.getText().toString() );
                    if (isInserted==true)
                        Toast.makeText(Main2Activity.this,"data 
 inserted",Toast.LENGTH_LONG).show();
                    else
                        Toast.makeText(Main2Activity.this,"data not 
 inserted",Toast.LENGTH_LONG).show();
                }
            }
    );
}

}

请帮助我,我是编程新手,所以我想在这里学习 先感谢您 我实际上也需要编辑和保存数据的帮助我编写代码但我将其保存在评论中

3 个答案:

答案 0 :(得分:1)

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

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

设置CursorAdapter,因为您使用数据库链接到列表视图并使用CursorAdapter.notifyDataSetChanged()

或者创建一个方法,在发生删除时重新创建列表视图。

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);

}

答案 1 :(得分:1)

删除时,您正在调用此

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

您没有传递所选项目的ID,但是您正在传递由getString(...)方法提取的菜单项&#39的字符串,这很奇怪。你班上有很多未使用的代码。

我建议您使用BaseAdapter和ListView。

答案 2 :(得分:0)

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

无论如何,在这种情况下,notifyDataSetChanged()是您正在寻找的解决方案。