在我的應用程序中有很多數據庫操作,所以我創建了許多遊標來檢索數據,並且在Async Task中也使用了很少的遊標。現在我的問題是關閉遊標和數據庫的地方。何處關閉在Activity中關閉遊標和數據庫對象沒有任何異常
當我關閉遊標onCreate
的異步操作我得到Null Pointer Exception
後,也如果我關閉在還是我得到Null pointer exception
,所以我在onDestroy
關閉遊標和數據庫。
現在我很困惑這種方法是否正確..我想了解什麼是關閉活動中游標和數據庫的最佳方式,而不會對數據庫操作產生任何影響。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.stockdetail);
//Helptext.setVisibility(View.INVISIBLE);
Declerations();
d=Database.getInstance(getApplicationContext()).getWritableDatabase();
new popdailydata().execute();
// Above is async task so I have closed after above statement, but if I close cursor getting Null pointer exception
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
selectdate.close();
Database.getInstance(getApplicationContext()).close();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
//selectdate.close(); --- At this point also I am getting nullpointer exception
Database.getInstance(getApplicationContext()).close();
}
04-01 17:03:48.045: D/dalvikvm(1288): Late-enabling CheckJNI
04-01 17:03:50.021: D/libEGL(1288): loaded /system/lib/egl/libEGL_genymotion.so
04-01 17:03:50.113: D/(1288): HostConnection::get() New Host Connection established 0xb90bb5c8, tid 1288
04-01 17:03:50.177: D/libEGL(1288): loaded /system/lib/egl/libGLESv1_CM_genymotion.so
04-01 17:03:50.181: D/libEGL(1288): loaded /system/lib/egl/libGLESv2_genymotion.so
04-01 17:03:50.773: W/EGL_genymotion(1288): eglSurfaceAttrib not implemented
04-01 17:03:50.797: E/OpenGLRenderer(1288): Getting MAX_TEXTURE_SIZE from GradienCache
04-01 17:03:50.861: E/OpenGLRenderer(1288): Getting MAX_TEXTURE_SIZE from Caches::initConstraints()
04-01 17:03:50.865: D/OpenGLRenderer(1288): Enabling debug mode 0
04-01 17:03:54.645: D/dalvikvm(1288): GC_FOR_ALLOC freed 102K, 1% free 16948K/17072K, paused 89ms, total 96ms
04-01 17:03:54.709: D/AndroidRuntime(1288): Shutting down VM
04-01 17:03:54.725: W/dalvikvm(1288): threadid=1: thread exiting with uncaught exception (group=0xa4c45648)
04-01 17:03:54.745: E/AndroidRuntime(1288): FATAL EXCEPTION: main
04-01 17:03:54.745: E/AndroidRuntime(1288): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.portfoliomanager/com.example.StockDirector.stockmanager}: java.lang.NullPointerException
04-01 17:03:54.745: E/AndroidRuntime(1288): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
04-01 17:03:54.745: E/AndroidRuntime(1288): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
04-01 17:03:54.745: E/AndroidRuntime(1288): at android.app.ActivityThread.access$600(ActivityThread.java:141)
04-01 17:03:54.745: E/AndroidRuntime(1288): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
04-01 17:03:54.745: E/AndroidRuntime(1288): at android.os.Handler.dispatchMessage(Handler.java:99)
04-01 17:03:54.745: E/AndroidRuntime(1288): at android.os.Looper.loop(Looper.java:137)
04-01 17:03:54.745: E/AndroidRuntime(1288): at android.app.ActivityThread.main(ActivityThread.java:5103)
04-01 17:03:54.745: E/AndroidRuntime(1288): at java.lang.reflect.Method.invokeNative(Native Method)
04-01 17:03:54.745: E/AndroidRuntime(1288): at java.lang.reflect.Method.invoke(Method.java:525)
04-01 17:03:54.745: E/AndroidRuntime(1288): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
04-01 17:03:54.745: E/AndroidRuntime(1288): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
04-01 17:03:54.745: E/AndroidRuntime(1288): at dalvik.system.NativeStart.main(Native Method)
04-01 17:03:54.745: E/AndroidRuntime(1288): Caused by: java.lang.NullPointerException
04-01 17:03:54.745: E/AndroidRuntime(1288): at com.example.StockDirector.stockmanager.onCreate(stockmanager.java:81)
04-01 17:03:54.745: E/AndroidRuntime(1288): at android.app.Activity.performCreate(Activity.java:5133)
04-01 17:03:54.745: E/AndroidRuntime(1288): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
04-01 17:03:54.745: E/AndroidRuntime(1288): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
04-01 17:03:54.745: E/AndroidRuntime(1288): ... 11 more
04-01 17:03:57.889: I/Process(1288): Sending signal. PID: 1288 SIG: 9
您還沒有表現出什麼,你用你的'Cursor'爲或者顯示顯示NPE的logcat輸出。 「遊標」必須在任何應用程序組件需要它的一生中保持打開狀態。例如,如果您將它與'SimpleCursorAdapter'一起用於填充'ListView',那麼在ListView和SimpleCursorAdapter不再使用之前,您無法關閉「Cursor」。 – Squonk
@Squonk感謝您的回答,併爲不提供logcat而表示歉意......用logcat編輯我的問題。請指教 – Siva
這仍然不能解釋你如何使用'Cursor'。你表明你在調用一個'AsyncTask'而不是'AsyncTask'對檢索到的數據做什麼。 – Squonk