Search code examples
androidcursor

Error with cursor


I get an error with cursor when I execute my code:

public void getCartData() 
{
        MainActivity activity = (MainActivity) getActivity();
        Prodotti tempCartItem = new Prodotti();
        cart_list.clear();

        Cursor c=sqLite.getAllProdottiCarrello();   //here is the error
        count=0;

I'm sure the problem isn't the method called. (sqLite is a variabile of a class extending SQLiteOpenHelper)

Here is the logcat:

04-16 20:55:23.900  25062-25062/com.example.utente.mysupermarket W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x41e0dda0)
04-16 20:55:23.910  25062-25062/com.example.utente.mysupermarket E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.example.utente.mysupermarket, PID: 25062
    java.lang.NullPointerException
            at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224)
            at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:188)
            at com.example.utente.mysupermarket.db.DatabaseHelper.getAllProdottiCarrello(DatabaseHelper.java:126)
            at com.example.utente.mysupermarket.CarrelloFragment.getCartData(CarrelloFragment.java:451)
            at com.example.utente.mysupermarket.CarrelloFragment.onCreateView(CarrelloFragment.java:70)
            at android.support.v4.app.Fragment.performCreateView(Fragment.java:1786)
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:953)
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1136)
            at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739)
            at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1499)
            at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:488)
            at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
            at android.support.v4.view.ViewPager.populate(ViewPager.java:1073)
            at android.support.v4.view.ViewPager.populate(ViewPager.java:919)
            at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1441)
            at android.view.View.measure(View.java:17478)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5363)
            at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
            at android.view.View.measure(View.java:17478)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5363)
            at android.support.v7.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:453)
            at android.view.View.measure(View.java:17478)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5363)
            at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
            at android.view.View.measure(View.java:17478)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5363)
            at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1410)
            at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
            at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
            at android.view.View.measure(View.java:17478)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5363)
            at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
            at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2548)
            at android.view.View.measure(View.java:17478)
            at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2266)
            at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1395)
            at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1594)
            at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1253)
            at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6596)
            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:803)
            at android.view.Choreographer.doCallbacks(Choreographer.java:603)
            at android.view.Choreographer.doFrame(Choreographer.java:573)
            at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:789)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5476)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
            at dalvik.system.NativeStart.main(Native Method)

Solution

  • public class CarrelloFragment extends Fragment { 
            DatabaseHelper sqLite=new DatabaseHelper(this.getActivity());
    

    getActivity() returns the Activity hosting the Fragment after onAttach has been executed. It returns null before. In your case getActivity in returning null. To fix delay the member intialization. For instance, you could initialize it the first time getCartData is called:

    public void getCartData() {
            MainActivity activity = (MainActivity) getActivity();
            if (sqLite == null) {
                  sqLite=new DatabaseHelper(activity);  
            }