android – 尝试调用getWritableDatabase()时继续获取NullPointerExceptions

android – 尝试调用getWritableDatabase()时继续获取NullPointerExceptions,第1张

概述我是 Android框架的新手,我无法通过SQLite获得第一个基础. 我正在尝试构建一个非常简单的应用程序,其中包含一个EditText搜索框,当按下某个键时,会在SQLite数据库上执行Like%word%搜索,以查找在EditText框中输入的文本,并将结果显示在列表显示. 注:下面的代码包括调试和注释代码,抱歉,我还没有完成清理它. 激活是 public class sustainable 我是 Android框架的新手,我无法通过sqlite获得第一个基础.

我正在尝试构建一个非常简单的应用程序,其中包含一个EditText搜索框,当按下某个键时,会在sqlite数据库上执行like%word%搜索,以查找在EditText框中输入的文本,并将结果显示在列表显示.

注:下面的代码包括调试和注释代码,抱歉,我还没有完成清理它.

激活是

public class sustainable_fish extends Activity {private String keycodetoAscii(int arg2){    String retvar = "";    switch(arg2){    case KeyEvent.KEYCODE_A: retvar = "a";break;    case KeyEvent.KEYCODE_B: retvar = "b";break;

剪掉了,但你明白了.

case KeyEvent.KEYCODE_RIGHT_BRACKET: retvar = ")";break;    default: retvar = ""; break;    };    return retvar;} Context that = getApplicationContext(); fishDB dh = new fishDB(getApplicationContext());private OnKeyListener search = new OnKeyListener() {    public boolean onKey(VIEw arg0,int arg1,KeyEvent arg2) {        @SuppressWarnings("unused")        Cursor cur = null;        String searchData;        EditText myEditText = (EditText) findVIEwByID(R.ID.fish_search);        CharSequence edit_text_value = myEditText.getText();        searchData = edit_text_value.toString();        searchData = searchData + keycodetoAscii(arg2.getKeyCode() );        Log.d("onKey","searchData = "+searchData);        /*        Commented out because as the database doesn't work,so theirs no point just yet searching.        cur = fish.search(searchData);        if (cur != null)        {            String[] displayFIElds = new String[] {cur.getString(2),cur.getString(1)};            int[] displayVIEws = new int[] { R.ID.fish_rank,R.ID.fish_name};            SimpleCursorAdapter adapter = new SimpleCursorAdapter(that,R.layout.text_List,cur,displayFIElds,displayVIEws);            ListVIEw myList=(ListVIEw)findVIEwByID(androID.R.ID.List);            myList.setAdapter(adapter);        }         */        return false;    }};/** Called when the activity is first created. */@OverrIDepublic voID onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);   setContentVIEw(R.layout.main);   EditText searchbar = (EditText) findVIEwByID(R.ID.fish_search);   searchbar.setonKeyListener(search); }}

sqlite数据库由fishDB处理

public class fishDB { public static final String DATABASE_name = "fish.db3"; public static final int DATABASE_VERSION = 1; private sqliteDatabase database; private Context myContext; private static boolean booFirstrun = false; fishDB(Context inContext){     myContext = inContext;     OpenHelper helper = new OpenHelper(myContext);     Log.w("fishDB","Called OpenHelper");             // Here be the problem...     database = helper.getWritableDatabase(); } public boolean firstRun(){    return booFirstrun; }   private static class OpenHelper extends sqliteOpenHelper {       private static final String CREATE_table_FeedS = "create table Feeds (Feed_ID integer primary key autoincrement,"           + "Title text not null,url text not null);";          OpenHelper(Context context) {             super(context,DATABASE_name,null,DATABASE_VERSION);             Log.w("OpenHelper","Called superconstructor");            }          @OverrIDe          public voID onCreate(sqliteDatabase db) {              try {              Log.w("OpenHelper","in onCreate");              booFirstrun = true;              Log.w("OpenHelper","set booFirstrun");              db.beginTransaction();              Log.w("OpenHelper","db.beginTransaction");              try {                  // Create tables and test data                  db.execsql(CREATE_table_FeedS);                  Log.w("OpenHelper","execsql");                  db.setTransactionSuccessful();                  Log.w("OpenHelper","setTransactionSuccessful");              } catch (sqlException e) {                  Log.e("Error creating tables and deBUG data",e.toString());                  throw e;              } finally {                  db.endTransaction();              }              } catch (Exception e) {                  Log.e("OpenHelper",e.toString() );              } finally {              Log.w("OpenHelper","out of onCreate");              }          }          @OverrIDe          public voID onUpgrade(sqliteDatabase db,int oldVersion,int newVersion) {             Log.w("OpenHelper","Upgrading database,this will drop tables and recreate.");             onCreate(db);          }       }  }

现在每次“database = helper.getWritableDatabase();”被称为应用程序崩溃与NullPointerException.我设法将错误跟踪到OpenHelper的onCreate方法和“db.beginTransaction();”线.

我错过了什么?

解决方法 实际上,您不需要在帮助程序的onCreate方法上启动事务.尝试从除db.execsql(CREATE_table_FeedS)之外的方法中删除所有内容;

更新:我能够重复这个问题.

在该错误消失后,将fishDb字段初始化移动到活动的onCreate()方法.看起来在调用onCreate之前启动数据库初始化并不是一个好主意.

而不是

fishDB fishDb = new fishDB(getApplicationContext());

fishDB fishDb;onCreate(){  super.onCreate();  fishDb = new fishDB(getApplicationContext());  .... //init Listener,query db etc..}
总结

以上是内存溢出为你收集整理的android – 尝试调用getWritableDatabase()时继续获取NullPointerExceptions全部内容,希望文章能够帮你解决android – 尝试调用getWritableDatabase()时继续获取NullPointerExceptions所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1131196.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存