【问题标题】:NullPointerException openOrCreateDatabase AndroidNullPointerException openOrCreateDatabase Android
【发布时间】:2012-03-21 08:56:40
【问题描述】:

我在打开数据库时在我的 EhActivity 类中遇到 NullPointerException

 public class EHActivity extends Activity {
ArrayList<String>ques= new ArrayList<String>();
 ArrayList<String>ans=new ArrayList<String>();
 SQLiteDatabase db2;

  public ArrayList<String> getQues()
  {
   db2=openOrCreateDatabase("interview.db", MODE_PRIVATE, null);
   db2.execSQL("create table eh (qid int primary key,ques varchar,ans char)");
       db2.execSQL("insert into subject values(1,'What is an exception?','A1 '))");
   db2.execSQL("insert into subject values(2,'What is error?','A2 '))");
       Cursor c=db2.rawQuery("select * from eh",null);
   while(c.moveToNext())
   {
    ques.add(c.getString(1));
   }
   return ques;
  }
 }

日志猫视图是:

03-21 14:06:15.910: E/AndroidRuntime(955): java.lang.NullPointerException 03-21 14:06:15.910: E/AndroidRuntime(955): 在 android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203) 03-21 14:06:15.910: E/AndroidRuntime(955): at interview.android.EHActivity.getQues(EHActivity.java:19)

【问题讨论】:

  • 我怀疑你在调用onCreate() 之前调用了getQues()(例如,来自EHActivity 的构造函数) - 你的活动上下文没有初始化
  • @zapl 我曾尝试使用 onCreate() 函数,但同样的错误即将到来。

标签: android nullpointerexception


【解决方案1】:

尝试不发送空值.. openOrCreateDatabase 对此有另一种方法..

db2=openOrCreateDatabase("interview.db", MODE_PRIVATE);

openDatabase("interview.db", MODE_PRIVATE, SQLiteDatabase.CREATE_IF_NECESSARY)

【讨论】:

  • no 该函数不允许用于两个参数第三个参数工厂必须通过,因此项目将无法运行..
  • ok 试试这个 - openDatabase("interview.db", MODE_PRIVATE, SQLiteDatabase.CREATE_IF_NECESSARY)。
  • 工厂 CREATE_IF_NECESSARY 的值无效
【解决方案2】:
public class Database_creat {
    private static final String DATABASE_NAME = "interview.db";
    public static final String DATABASE_TABLE_CATEGORY = "category";
    public static final String DATABASE_TABLE_TODO_LIST = "todo_list";
    private static final int DATABASE_VERSION = 1;
    public ArrayList<ModelToDO> list;


    private DataBaseHelper mDbhelper;
    private SQLiteDatabase mDb;

    Context mContext;
    private static final String DATABASE_CREATE_CATEGORY = "create table category(id integer primary key autoincrement , "
            + "category text not null);";
    private static final String DATABASE_CREATE_TODO_LIST = "create table todo_list(id integer primary key autoincrement , "
            + "title text not null,description text not null,category text not null, due_date Date not null,alarm_time text ,alarm_set text,priority text,parform Boolean);";

    private static class DataBaseHelper extends SQLiteOpenHelper {

        DataBaseHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
            // TODO Auto-generated constructor stub
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            // TODO Auto-generated method stub
            db.execSQL(DATABASE_CREATE_CATEGORY);
            db.execSQL(DATABASE_CREATE_TODO_LIST);
        }

        //Delete All todo_list Table info
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // TODO Auto-generated method stub
            db.execSQL("DROP TABLE IF EXISTS submit");
            onCreate(db);
        }
    }

    public Database_creat(Context context) {
        this.mContext = context;
    }

    public Database_creat Open() throws SQLException {
        mDbhelper = new DataBaseHelper(mContext);
        mDb = mDbhelper.getWritableDatabase();
        return this;

    }

    public void close() {
        mDbhelper.close();
    }

    //Add new Category name
    public long insertinfo(String cate) {
        ContentValues con = new ContentValues();
        con.put("category", cate);
        return mDb.insert(DATABASE_TABLE_CATEGORY, null, con);
    }


}

这个在使用的查询中创建数据库

【讨论】:

    【解决方案3】:

    嗨,Shubh 试试下面的代码..

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    
    
    db2=openOrCreateDatabase("sdcard/yourappfolder/interview.db", MODE_PRIVATE, null);
    

    【讨论】:

    • db2.execSQL("插入主题值(1,'什么是异常?','A1'))");在这里,您正在关闭 3 个括号。而您只打开了两个。删除倒数第二个括号。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    相关资源
    最近更新 更多