我正在尝试构建一个非常简单的应用程序,其中包含一个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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)