Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 访问删除方法数据库时应用程序强制关闭_Android_Database_Sqlite_Android Sqlite_Sqliteopenhelper - Fatal编程技术网

Android 访问删除方法数据库时应用程序强制关闭

Android 访问删除方法数据库时应用程序强制关闭,android,database,sqlite,android-sqlite,sqliteopenhelper,Android,Database,Sqlite,Android Sqlite,Sqliteopenhelper,当我访问delete方法时,我的应用程序强制关闭,它可以与insert和get items方法一起正常工作。 在databasehandler中 public class DatabaseHandler extends SQLiteOpenHelper { private static final int DB_VERSION = 1; private static final String DB_NAME = "mydb"; private static final String TABLE_

当我访问delete方法时,我的应用程序强制关闭,它可以与insert和get items方法一起正常工作。 在databasehandler中

public class DatabaseHandler extends SQLiteOpenHelper {
private static final int DB_VERSION = 1;
private static final String DB_NAME = "mydb";
private static final String TABLE_NAME = "mytable";
private static final String _id = "_id";
private static final String name = "name";

public DatabaseHandler(Context context) {
    super(context, DB_NAME, null, DB_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
    String createTableQuery = "create table " + TABLE_NAME + "(" + _id
            + " INTEGER PRIMARY KEY," + name + " TEXT)";
    db.execSQL(createTableQuery);

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    db.execSQL("drop table if exists " + TABLE_NAME);

    onCreate(db);
}

public void insertData(String label) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(name, label);
    db.insert(TABLE_NAME, null, values);
    db.close();
}

public void deleteData(String item){
    SQLiteDatabase db =this.getWritableDatabase();
    //db.delete(TABLE_NAME, name+ "='" +item +"'", null);
    db.execSQL("DELETE FROM TABLE_NAME WHERE name='"+item+"'");
    db.close();
}

     public Set<String> getAllData() {
    Set<String> set = new HashSet<String>();

    String selectQuery = "select * from " + TABLE_NAME;

    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    if (cursor.moveToFirst()) {
        do {
            set.add(cursor.getString(1));
        } while (cursor.moveToNext());
    }

    cursor.close();
    db.close();

    return set;
}
   }
我的活动

public class ListActivity extends Activity implements OnClickListener,
         OnItemSelectedListener {

private EditText edittext;
private Button btnAdd;
DatabaseHandler db;
private Spinner spinner;
ArrayAdapter<String> adapter;
List<String> list;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.list);
    db = new DatabaseHandler(ListActivity.this);
    edittext = (EditText) findViewById(R.id.editText1);
    btnAdd = (Button) findViewById(R.id.btnadd);
    spinner = (Spinner) findViewById(R.id.spinner);
    btnAdd.setOnClickListener(this);
    spinner.setOnItemSelectedListener(this);
    loadSpinner();
}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    String name = edittext.getText().toString().trim();

    if (TextUtils.isEmpty(name)) {
        edittext.setError("Enter a valid Message");
        edittext.requestFocus();
    } else {
        db.insertData(name);
        edittext.setText("");

        // Hiding the keyboard
        InputMethodManager inputmangager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        inputmangager.hideSoftInputFromWindow(edittext.getWindowToken(), 0);

    }
    Toast.makeText(getApplicationContext(),"Template added Successfully", 0).show();
    Intent in = new Intent(ListActivity.this,MainActivity.class);
    startActivity(in);
    finish();
}

@Override
public void onItemSelected(AdapterView<?> parent, View v, int position,
     long id) {
    String deleteitem = parent.getItemAtPosition(position).toString();
    //db.deleteData(deleteitem);
    loadSpinner();
    }

@Override
public void onNothingSelected(AdapterView<?> arg0) {
    // TODO Auto-generated method stub

}

private void loadSpinner() {
    // TODO Auto-generated method stub
    Set<String> set = db.getAllData();

    List<String> list = new ArrayList<String>(set);

    adapter = new ArrayAdapter<String>(ListActivity.this,
            android.R.layout.simple_spinner_item, list);

    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    spinner.setAdapter(adapter);
    spinner.setWillNotDraw(false);

}

  }
公共类ListActivity扩展活动实现OnClickListener,
OnItemSelectedListener{
私人编辑文本;
专用按钮btnAdd;
数据库处理程序数据库;
私人纺纱机;
阵列适配器;
名单;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.list);
db=新的DatabaseHandler(ListActivity.this);
edittext=(edittext)findViewById(R.id.editText1);
btnAdd=(按钮)findviewbyd(R.id.btnAdd);
微调器=(微调器)findViewById(R.id.spinner);
btnAdd.setOnClickListener(此);
spinner.setOnItemSelectedListener(此);
loadSpinner();
}
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
字符串名称=edittext.getText().toString().trim();
if(TextUtils.isEmpty(name)){
setError(“输入有效消息”);
edittext.requestFocus();
}否则{
db.insertData(名称);
edittext.setText(“”);
//隐藏键盘
InputMethodManager InputManager=(InputMethodManager)getSystemService(Context.INPUT\u方法\u服务);
InputManager.hideSoftInputFromWindow(edittext.getWindowToken(),0);
}
Toast.makeText(getApplicationContext(),“模板添加成功”,0.show();
Intent in=新的Intent(ListActivity.this,MainActivity.class);
星触觉(in);
完成();
}
@凌驾
已选择公共位置(AdapterView父视图、视图v、内部位置、,
长id){
字符串deleteitem=parent.getItemAtPosition(position.toString();
//db.deleteData(deleteitem);
loadSpinner();
}
@凌驾
未选择公共无效(AdapterView arg0){
//TODO自动生成的方法存根
}
私有void加载微调器(){
//TODO自动生成的方法存根
Set=db.getAllData();
列表=新的ArrayList(集合);
适配器=新的ArrayAdapter(ListActivity.this,
android.R.layout.simple\u微调器\u项目,列表);
setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
旋转器。设置适配器(适配器);
spinner.setWillNotDraw(false);
}
}
尝试更改

db.delete(TABLE_NAME, name+ "=" +item, null);
这条线到

db.delete(TABLE_NAME, name+ "=?", new String[] { (item) });
像这样或那样

db.delete(TABLE_NAME, name+ "='" +item+"'", null);
像这样

我想你没有在你的应用程序中使用
btnAdd
anywere。如果是,请删除

btnAdd = (Button) findViewById(R.id.btnadd);
这条线。并从中删除注释符号(
/

这条线

也会改变

String createTableQuery = "create table " + TABLE_NAME + "(" + _id
            + " INTEGER PRIMARY KEY," + name + " TEXT)";
这条线到

String createTableQuery = "create table " + TABLE_NAME + " (" + _id
            + " INTEGER PRIMARY KEY," + name + " TEXT)";
像这样。请注意
表名
)之间的空格

让我知道会发生什么。

尝试改变

db.delete(TABLE_NAME, name+ "=" +item, null);
这条线到

db.delete(TABLE_NAME, name+ "=?", new String[] { (item) });
像这样或那样

db.delete(TABLE_NAME, name+ "='" +item+"'", null);
像这样

我认为您的应用程序中没有使用任何WARE。如果是,请删除

btnAdd = (Button) findViewById(R.id.btnadd);
并从中删除注释符号(
/

这条线

也会改变

String createTableQuery = "create table " + TABLE_NAME + "(" + _id
            + " INTEGER PRIMARY KEY," + name + " TEXT)";
这条线到

String createTableQuery = "create table " + TABLE_NAME + " (" + _id
            + " INTEGER PRIMARY KEY," + name + " TEXT)";
注意
表名
)之间的空格


然后让我知道发生了什么。

只是“像这样丢失了字符串:

db.delete(TABLE_NAME, name+ "='" +item + "'", null);
您正在删除SQL中的一个字符串,您需要在其周围加上“圈”

更新:

只要改变这个:

db.execSQL("DELETE FROM TABLE_NAME WHERE name='"+item+"'");
作者:


只是“缺少以下字符串:

db.delete(TABLE_NAME, name+ "='" +item + "'", null);
您正在删除SQL中的一个字符串,您需要在其周围加上“圈”

更新:

只要改变这个:

db.execSQL("DELETE FROM TABLE_NAME WHERE name='"+item+"'");
作者:


我更喜欢execSQL:

db.execSQL("DELETE FROM x WHERE y='"+z+"'");

我更喜欢execSQL:

db.execSQL("DELETE FROM x WHERE y='"+z+"'");


使用rawQuery添加您的logcat outputcheck,即db.rawQuery(“从表\u name中删除,其中KEY\u name=“+name”);spinner中有多少项?可能您的loadSpinner()有问题方法,因为您删除了唯一的现有表?LOGCAT是您最好的朋友……。@Rob请显示您的
ListActivity
代码,并在其中提及第39行,使用rawQuery添加您的LOGCAT输出检查,即db.rawQuery(“从表名中删除,其中KEY\u name=“+name”);spinner中有多少项?可能您的loadSpinner()有问题方法如果您尝试加载,但没有任何内容可加载,因为您删除了唯一现有的表?LOGCAT是您最好的朋友……。@Rob请显示您的
ListActivity
代码,并在其中提及第39行。我尝试了您提到的所有内容。仍然无法解决此问题。按钮问题已取消。请检查LOGCAT i update现在,你可以发布你的表创建方法了吗?现在,如果我从//db.deleteData(deleteitem)中删除//,它会显示force close,否则会很好。我已经添加了我的databasehandler.its工作。此行正在工作。db.delete(table_NAME,NAME+“=?”,新字符串[]{(item)});谢谢Dhanaseelan。我尝试了你提到的所有方法。仍然无法解决。按钮问题已经解决。请检查我现在更新的日志。你能发布你的表创建方法吗?现在如果我从//db.deleteData(deleteitem)中删除//的话;它显示的是强制关闭,否则很好。我已经添加了我的databasehandler.its working。这一行正在运行。db.delete(TABLE_NAME,NAME+“=?”,新字符串[]{(item)});谢谢Dhanaseelan。谢谢,你的方法是完美的。我的方法显示错误是因为字符串值中有标点符号。不知怎的,它现在可以工作了。谢谢,你的方法是完美的。我的方法显示错误是因为字符串值中有标点符号。不知怎的,它现在可以工作了。