2011-09-11 90 views
0

我在下面的代码中遇到错误。我知道这是一个混乱的事情。出于某种原因,我得到一个空指针异常。堆栈跟踪点到44行是这一行:Android空指针异常MySimpleTreeAdapter

MySimpleCursorTreeAdapter mscta = new MySimpleCursorTreeAdapter(

代码:

protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.cattest); 

      SQLiteDatabase checkDB = null; 
      String myPath = DB_PATH + DB_NAME; 
      checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); 
      //froggydb = dbHelper.getReadableDatabase(); 


      Cursor groupCursor = checkDB.rawQuery("SELECT * FROM questions", null); 
      MySimpleCursorTreeAdapter mscta = new MySimpleCursorTreeAdapter(
                this, 
                groupCursor, 
                R.layout.employee_list_item, 
                new String[] {"question"}, 
                new int[] {R.id.firstName}, 
                R.layout.employee_list_item, 
                new String[] {"question"}, 
                new int[] {R.id.firstName}); 
      setListAdapter(mscta); 
      checkDB.close(); 
    } 

    class MySimpleCursorTreeAdapter extends SimpleCursorTreeAdapter{ 

      public MySimpleCursorTreeAdapter(Context context, Cursor cursor, 
          int groupLayout, String[] groupFrom, int[] groupTo, 
          int childLayout, String[] childFrom, int[] childTo) { 
        super(context, cursor, groupLayout, groupFrom, groupTo, childLayout, childFrom, 
            childTo); 
      } 


      @Override 
      protected Cursor getChildrenCursor(Cursor groupCursor) { 
        String countryID = Integer.toString(groupCursor.getInt(0)); 
        SQLiteDatabase checkDB = null; 
        String myPath = DB_PATH + DB_NAME; 
        checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); 

        Cursor value = checkDB.rawQuery("SELECT * FROM questions", null); 

        String test = ""; 
        if(value.moveToFirst()) 
          test = value.getInt(0) + ": " + value.getString(1); 
        while(value.moveToNext()){ 
          test += ";" + value.getInt(0) + ": " + value.getString(1); 
        } 
        return value; 
      } 
    } 

堆栈跟踪:

09-11 14:33:09.365: ERROR/AndroidRuntime(161): Uncaught handler: thread main exiting due to uncaught exception 
09-11 14:33:10.565: ERROR/AndroidRuntime(161): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.home.max/com.browse.max.Categories}: java.lang.NullPointerException 
09-11 14:33:10.565: ERROR/AndroidRuntime(161):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2401) 
09-11 14:33:10.565: ERROR/AndroidRuntime(161):  at android.app.ActivityThread.startActivityNow(ActivityThread.java:2242) 
09-11 14:33:10.565: ERROR/AndroidRuntime(161):  at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127) 
09-11 14:33:10.565: ERROR/AndroidRuntime(161):  at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339) 
09-11 14:33:10.565: ERROR/AndroidRuntime(161):  at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:631) 
09-11 14:33:10.565: ERROR/AndroidRuntime(161):  at android.widget.TabHost.setCurrentTab(TabHost.java:317) 
09-11 14:33:10.565: ERROR/AndroidRuntime(161):  at android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:127) 
09-11 14:33:10.565: ERROR/AndroidRuntime(161):  at android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:346) 
09-11 14:33:10.565: ERROR/AndroidRuntime(161):  at android.view.View.performClick(View.java:2344) 
09-11 14:33:10.565: ERROR/AndroidRuntime(161):  at android.view.View.onTouchEvent(View.java:4133) 
09-11 14:33:10.565: ERROR/AndroidRuntime(161):  at android.view.View.dispatchTouchEvent(View.java:3672) 
09-11 14:33:10.565: ERROR/AndroidRuntime(161):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:850) 
09-11 14:33:10.565: ERROR/AndroidRuntime(161):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882) 
09-11 14:33:10.565: ERROR/AndroidRuntime(161):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882) 
09-11 14:33:10.565: ERROR/AndroidRuntime(161):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882) 
09-11 14:33:10.565: ERROR/AndroidRuntime(161):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882) 
09-11 14:33:10.565: ERROR/AndroidRuntime(161):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882) 
09-11 14:33:10.565: ERROR/AndroidRuntime(161):  at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1712) 
09-11 14:33:10.565: ERROR/AndroidRuntime(161):  at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1202) 
09-11 14:33:10.565: ERROR/AndroidRuntime(161):  at android.app.Activity.dispatchTouchEvent(Activity.java:1987) 
09-11 14:33:10.565: ERROR/AndroidRuntime(161):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1696) 
09-11 14:33:10.565: ERROR/AndroidRuntime(161):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1658) 
09-11 14:33:10.565: ERROR/AndroidRuntime(161):  at android.os.Handler.dispatchMessage(Handler.java:99) 
09-11 14:33:10.565: ERROR/AndroidRuntime(161):  at android.os.Looper.loop(Looper.java:123) 
09-11 14:33:10.565: ERROR/AndroidRuntime(161):  at android.app.ActivityThread.main(ActivityThread.java:4203) 
09-11 14:33:10.565: ERROR/AndroidRuntime(161):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-11 14:33:10.565: ERROR/AndroidRuntime(161):  at java.lang.reflect.Method.invoke(Method.java:521) 
09-11 14:33:10.565: ERROR/AndroidRuntime(161):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) 
09-11 14:33:10.565: ERROR/AndroidRuntime(161):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549) 
09-11 14:33:10.565: ERROR/AndroidRuntime(161):  at dalvik.system.NativeStart.main(Native Method) 
09-11 14:33:10.565: ERROR/AndroidRuntime(161): Caused by: java.lang.NullPointerException 
09-11 14:33:10.565: ERROR/AndroidRuntime(161):  at com.browse.max.Categories$MySimpleCursorTreeAdapter.getChildrenCursor(Categories.java:69) 
09-11 14:33:10.565: ERROR/AndroidRuntime(161):  at android.widget.CursorTreeAdapter.getChildrenCursorHelper(CursorTreeAdapter.java:106) 
09-11 14:33:10.565: ERROR/AndroidRuntime(161):  at android.widget.SimpleCursorTreeAdapter.init(SimpleCursorTreeAdapter.java:172) 
09-11 14:33:10.565: ERROR/AndroidRuntime(161):  at android.widget.SimpleCursorTreeAdapter.<init>(SimpleCursorTreeAdapter.java:157) 
09-11 14:33:10.565: ERROR/AndroidRuntime(161):  at com.browse.max.Categories$MySimpleCursorTreeAdapter.<init>(Categories.java:62) 
09-11 14:33:10.565: ERROR/AndroidRuntime(161):  at com.browse.max.Categories.onCreate(Categories.java:44) 
09-11 14:33:10.565: ERROR/AndroidRuntime(161):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123) 
09-11 14:33:10.565: ERROR/AndroidRuntime(161):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364) 
09-11 14:33:10.565: ERROR/AndroidRuntime(161):  ... 29 more 
+3

请发布stacktrace并指出发生异常的行。 – 2011-09-11 15:09:43

+0

'NullPointers'非常容易追踪。我不明白为什么有这么多关于他们的问题...... –

+0

NPE在哪里? – st0le

回答

0

如果异常真正被在该行抛出,您表示,那么原因是R.idnull

其他可能性是RnullR.layout为空。但是如果其中任何一个都是真的,那么NPE将被抛出:

setContentView(R.layout.cattest);