Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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 由于ClassCastException,应用程序在启动时崩溃_Android_Sqlite_Crash - Fatal编程技术网

Android 由于ClassCastException,应用程序在启动时崩溃

Android 由于ClassCastException,应用程序在启动时崩溃,android,sqlite,crash,Android,Sqlite,Crash,当我启动我的应用程序时,我在Cursor c=(Cursor)DataHelper.selectAll()处得到一个ClassCastException 以下是我的主要.java: package com.gantt.shoppinglist; import android.app.Dialog; import android.app.ListActivity; import android.database.Cursor; import android.os.Bundle; import a

当我启动我的应用程序时,我在
Cursor c=(Cursor)DataHelper.selectAll()处得到一个ClassCastException

以下是我的主要.java:

package com.gantt.shoppinglist;

import android.app.Dialog;
import android.app.ListActivity;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;

public class ShoppingList extends ListActivity {

    private DataHelper DataHelper;
    /** Called when the activity is first created. */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        DataHelper = new DataHelper(this);

        ListView listview = (ListView) findViewById(android.R.id.list);

        Cursor c = (Cursor) DataHelper.selectAll();
        startManagingCursor(c);

        String[] from = new String[] { com.gantt.shoppinglist.DataHelper.getDatabaseName() };
        int[] to = new int[] { android.R.id.text1 };

        ListAdapter adapter = new SimpleCursorAdapter(this,
                R.layout.rowlayout, c, from, to);
        setListAdapter(adapter);

        Button button1main = (Button) findViewById(R.id.add);
        button1main.setOnClickListener(new OnClickListener()  {
            @Override
            public void onClick(View v)  {
            final Dialog additem = new Dialog(ShoppingList.this);
            additem.setContentView(R.layout.maindialog);
            final EditText et = (EditText)additem.findViewById(R.id.edittext);
            additem.setTitle("Type your item");
            additem.setCancelable(true);
            et.setHint("Type the name of an item...");

            Button button = (Button) additem.findViewById(R.id.cancel);
            button.setOnClickListener(new OnClickListener()  {
                @Override
                public void onClick(View v)  {
                    additem.dismiss();
                }
            });
            additem.show();

            Button ok = (Button) additem.findViewById(R.id.ok);
            ok.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    final String text = et.getText().toString();
                    additem.dismiss();
                    et.setText("");
                }
            });
       }
        });
    }
}
我的DataHelper类:

package com.gantt.shoppinglist;

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

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteStatement;
import android.util.Log;

public class DataHelper {

       private static final String DATABASE_NAME = "items.db";
       private static final int DATABASE_VERSION = 1;
       private static final String TABLE_NAME = "table1";

       private Context context;
       private SQLiteDatabase db;

       private SQLiteStatement insertStmt;
       private static final String INSERT = "insert into " 
          + TABLE_NAME + "(name) values (?)";

       public DataHelper(Context context) {
          this.context = context;
          OpenHelper openHelper = new OpenHelper(this.context);
          this.db = openHelper.getWritableDatabase();
          this.insertStmt = this.db.compileStatement(INSERT);
       }

       public long insert(String name) {
          this.insertStmt.bindString(1, name);
          return this.insertStmt.executeInsert();
       }

       public void deleteAll() {
          this.db.delete(TABLE_NAME, null, null);
       }

       public List<String> selectAll() {
          List<String> list = new ArrayList<String>();
          Cursor cursor = this.db.query(TABLE_NAME, new String[] { "name" }, 
            null, null, null, null, "name desc");
          if (cursor.moveToFirst()) {
             do {
                list.add(cursor.getString(0)); 
             } while (cursor.moveToNext());
          }
          if (cursor != null && !cursor.isClosed()) {
             cursor.close();
          }
          return list;
       }

       public static String getDatabaseName() {
        return DATABASE_NAME;
    }

    private static class OpenHelper extends SQLiteOpenHelper {

          OpenHelper(Context context) {
             super(context, getDatabaseName(), null, DATABASE_VERSION);
          }

          @Override
          public void onCreate(SQLiteDatabase db) {
              db.execSQL("CREATE TABLE " + TABLE_NAME + "(id INTEGER PRIMARY KEY, name TEXT);");

          }

          @Override
          public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
             Log.w("Example", "Upgrading database, this will drop tables and recreate.");
             db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
             onCreate(db);
          }
       }
    }
package com.gantt.shoppinglist;
导入java.util.ArrayList;
导入java.util.List;
导入android.content.Context;
导入android.database.Cursor;
导入android.database.sqlite.SQLiteDatabase;
导入android.database.sqlite.SQLiteOpenHelper;
导入android.database.sqlite.SQLiteStatement;
导入android.util.Log;
公共类DataHelper{
私有静态最终字符串数据库\u NAME=“items.db”;
私有静态最终int数据库_VERSION=1;
私有静态最终字符串表\u NAME=“table1”;
私人语境;
专用数据库数据库;
私有SQLiteStatement insertStmt;
私有静态最终字符串INSERT=“插入到”
+表_NAME+“(NAME)值(?);
公共DataHelper(上下文){
this.context=上下文;
OpenHelper OpenHelper=新的OpenHelper(this.context);
this.db=openHelper.getWritableDatabase();
this.insertStmt=this.db.compileStatement(INSERT);
}
公共长插入(字符串名称){
this.insertStmt.bindString(1,名称);
返回此.insertStmt.executeInsert();
}
public void deleteAll(){
this.db.delete(表名称,null,null);
}
公共列表selectAll(){
列表=新的ArrayList();
Cursor Cursor=this.db.query(表名,新字符串[]{“NAME”},
空,空,空,空,“名称描述”);
if(cursor.moveToFirst()){
做{
list.add(cursor.getString(0));
}while(cursor.moveToNext());
}
if(cursor!=null&!cursor.isClosed()){
cursor.close();
}
退货清单;
}
公共静态字符串getDatabaseName(){
返回数据库名称;
}
私有静态类OpenHelper扩展了SQLiteOpenHelper{
OpenHelper(上下文){
super(上下文,getDatabaseName(),null,数据库版本);
}
@凌驾
public void onCreate(SQLiteDatabase db){
db.execSQL(“创建表”+表名+”(id整数主键,名称文本);”;
}
@凌驾
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion){
w(“示例”,“升级数据库,这将删除表并重新创建”);
db.execSQL(“如果存在删除表”+表名称);
onCreate(db);
}
}
}

您得到的是
ClassCastException
,因为您试图将
列表
强制转换为
光标
,这在继承层次结构中不相关


看起来您正在混合来自
ArrayAdapter
示例和
CursorAdapter
示例的代码。如果希望
selectAll()
返回
List
,请更仔细地按照
ArrayAdapter
示例操作。否则,请更改
selectAll()
以返回
光标
,并更仔细地遵循
光标或适配器
示例。

您得到的是
ClassCastException
,因为您正试图将
列表
强制转换为
光标
,这在继承层次结构中不相关


看起来您正在混合来自
ArrayAdapter
示例和
CursorAdapter
示例的代码。如果希望
selectAll()
返回
List
,请更仔细地按照
ArrayAdapter
示例操作。否则,更改
selectAll()
以返回
光标
,并更仔细地遵循
CursorAdapter
示例。

刚刚要发布相同的:)这就是我在中所说的……谢谢,我对这一点还是新手。实际上,我已经到了需要知道如何添加_id列的地步。我一直在查,到目前为止运气不好。我正要发同样的帖子:)这是我在中说的……谢谢,我对这一点还是新手。事实上,我已经到了需要弄清楚如何添加一个_id列的地步。我一直在查,到目前为止运气不好。