我在做什么 ::
getDataFromSqlite();
代码问题 ::
代码段 ::
@Override
public void onStart() {
// TODO Auto-generated method stub
super.onStart();
txtBufTime.setText(sendBufTime);
txtBufDistance.setText(sendDistance);
txtOnlinePrice.setText(sendOnlinePrice);
txtReservePrice.setText(sendReservePrice);
txtBuffetDesc.setText(sendDescription);
txtBufType.setText(sendBufType);
setRating(sendRating);
new LongOperation().execute();
}
private class LongOperation extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
getDataFromSqlite();
return null;
}
@Override
protected void onPostExecute(Void result) {
Toast.makeText(getActivity(), "DOne", Toast.LENGTH_SHORT).show();
}
@Override
protected void onPreExecute() {}
@Override
protected void onProgressUpdate(Void... values) {}
}
public void getDataFromSqlite() {
///
Cursor cursor = null;
DatabaseHandler mHelper = new DatabaseHandler(getActivity().getApplicationContext());
SQLiteDatabase db = mHelper.getWritableDatabase();
String queryString="select menu_type_id , cuisine_type_name , item_name" +
" from buffets " +
"where buff_off_id = " + sendBuffetId;
Log.d("queryString", queryString.toString());
try {
cursor = db.rawQuery(queryString, null);
} catch (Exception e) {
e.printStackTrace();
} finally {
cursor.close();
}
}
日志 ::
**05-15 13:41:17.547: E/AndroidRuntime(2743): FATAL EXCEPTION: AsyncTask #5
05-15 13:41:17.547: E/AndroidRuntime(2743): java.lang.RuntimeException: An error occured while executing doInBackground()
05-15 13:41:17.547: E/AndroidRuntime(2743): at android.os.AsyncTask$3.done(AsyncTask.java:278)
05-15 13:41:17.547: E/AndroidRuntime(2743): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
05-15 13:41:17.547: E/AndroidRuntime(2743): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
05-15 13:41:17.547: E/AndroidRuntime(2743): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
05-15 13:41:17.547: E/AndroidRuntime(2743): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
05-15 13:41:17.547: E/AndroidRuntime(2743): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
05-15 13:41:17.547: E/AndroidRuntime(2743): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
05-15 13:41:17.547: E/AndroidRuntime(2743): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
05-15 13:41:17.547: E/AndroidRuntime(2743): at java.lang.Thread.run(Thread.java:856)
05-15 13:41:17.547: E/AndroidRuntime(2743): Caused by: java.lang.NullPointerException
05-15 13:41:17.547: E/AndroidRuntime(2743): at com.findmybuffet.fragments.FragBuffetContents.getDataFromSqlite(FragBuffetContents.java:154)
05-15 13:41:17.547: E/AndroidRuntime(2743): at com.findmybuffet.fragments.FragBuffetContents$LongOperation.doInBackground(FragBuffetContents.java:120)
05-15 13:41:17.547: E/AndroidRuntime(2743): at com.findmybuffet.fragments.FragBuffetContents$LongOperation.doInBackground(FragBuffetContents.java:1)
05-15 13:41:17.547: E/AndroidRuntime(2743): at android.os.AsyncTask$2.call(AsyncTask.java:264)
05-15 13:41:17.547: E/AndroidRuntime(2743): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)**
答案 0 :(得分:0)
来自评论:
154行是cursor.close();
Cursor cursor = null;
//...
try {
cursor = db.rawQuery(queryString, null);
} catch (Exception e) {
e.printStackTrace();
} finally {
cursor.close();
}
如果发生异常,cursor
为null
并尝试在其上调用方法会导致NPE。移动cursor.close()
块中的try
,或用if (cursor != null)
条件包围它。
如果存在SQL语法问题,为什么rawQuery()
抛出。要获得相关帮助,请发布您在catch
块中登录的例外的例外。