2013-05-15 42 views
0

我想跟着一本書,我錯過了本教程中的內容。然而,我失去了我的方式,我試圖找出爲什麼這與空指針異常崩潰。只有一個人可以看到我在這裏失蹤了嗎?無效光標在列表視圖上

public class HistoryFragment extends Fragment { 

    DbHelper dbHelper; 
    SQLiteDatabase db; 
    Cursor cursor; 
    ListView listTimeline; 
    SimpleCursorAdapter adapter; 
    static final String[] FROM = {DbHelper.KEY_CHARTING_DATE, DbHelper.KEY_NAME, DbHelper.KEY_CHARTING_NOTES}; 
    static final int[] TO = {R.id.textDate, R.id.textUser, R.id.textText}; 



    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    }  

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     View view = inflater.inflate(R.layout.fragment_history, container, false); 

     listTimeline = (ListView) getView().findViewById(R.id.listTimeline); 

     //connect to database 
     dbHelper = new DbHelper(getActivity()); 
     db = dbHelper.getReadableDatabase(); 

     return view; 

    } 

    @Override 
    public void onDestroy(){ 
     super.onDestroy(); 

     //close datbase 
     db.close(); 
    } 

    @Override 
    public void onResume(){ 
     super.onResume(); 

     //Get the data from the database 
     cursor = db.query(DbHelper.DATABASE_TABLE, null, null, null, null, null, DbHelper.KEY_CHARTING_DATE + " DESC"); 
     getActivity().startManagingCursor(cursor); 

     //Sup up the adapter 
     adapter.setViewBinder(VIEW_BINDER); 
     listTimeline.setAdapter(adapter); 
    } 

    static final ViewBinder VIEW_BINDER = new ViewBinder() { 
     public boolean setViewValue(View view, Cursor cursor, int columnIndex) { 
      if (view.getId() != R.id.textDate) 
       return false; 

      //update the created at text 
      long timestamp = cursor.getLong(columnIndex); 
      CharSequence relTime = DateUtils.getRelativeTimeSpanString(view.getContext(), timestamp); 
      ((TextView) view).setText(relTime); 

      return true; 
     } 
    }; 
} 

的logcat:

 05-15 20:37:49.412: E/AndroidRuntime(945): java.lang.NullPointerException 
     05-15 20:37:49.412: E/AndroidRuntime(945): at com.projectcaruso.naturalfamilyplaning.HistoryFragment.onCreateView(HistoryFragment.java:41) 
     05-15 20:37:49.412: E/AndroidRuntime(945): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460) 
     05-15 20:37:49.412: E/AndroidRuntime(945): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911) 
     05-15 20:37:49.412: E/AndroidRuntime(945): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088) 
     05-15 20:37:49.412: E/AndroidRuntime(945): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 
     05-15 20:37:49.412: E/AndroidRuntime(945): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444) 
     05-15 20:37:49.412: E/AndroidRuntime(945): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:429) 
     05-15 20:37:49.412: E/AndroidRuntime(945): at android.os.Handler.handleCallback(Handler.java:725) 
     05-15 20:37:49.412: E/AndroidRuntime(945): at android.os.Handler.dispatchMessage(Handler.java:92) 
     05-15 20:37:49.412: E/AndroidRuntime(945): at android.os.Looper.loop(Looper.java:137) 
     05-15 20:37:49.412: E/AndroidRuntime(945): at android.app.ActivityThread.main(ActivityThread.java:5041) 
     05-15 20:37:49.412: E/AndroidRuntime(945): at java.lang.reflect.Method.invokeNative(Native Method) 
     05-15 20:37:49.412: E/AndroidRuntime(945): at java.lang.reflect.Method.invoke(Method.java:511) 
     05-15 20:37:49.412: E/AndroidRuntime(945): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
     05-15 20:37:49.412: E/AndroidRuntime(945): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
     05-15 20:37:49.412: E/AndroidRuntime(945): at dalvik.system.NativeStart.main(Native Method) 
+0

嗯,你可以看到,異常發生在管線41因此,這行是那? –

+0

listTimeline =(ListView)getView()。findViewById(R.id.listTimeline); – jcaruso

+0

爲什麼不使用ListFragment? http://developer.android.com/reference/android/app/ListFragment.html –

回答

1

getView方法返回onCreateView返回查看。您在onCreateView完成之前調用它,因此getView()返回null。請參閱文件的位置:
https://developer.android.com/reference/android/app/Fragment.html#getView%28%29

嘗試更換這些線路:

View view = inflater.inflate(R.layout.fragment_history, container, false); 
listTimeline = (ListView) getView().findViewById(R.id.listTimeline); 

有了這些:

View view = inflater.inflate(R.layout.fragment_history, container, false); 
listTimeline = (ListView) view.findViewById(R.id.listTimeline); 
+0

太棒了!這讓我過去,得到一個錯誤\t \t adapter.setViewBinder(VIEW_BINDER); – jcaruso

+0

我需要知道錯誤是什麼,但我猜你正在得到一個NPE,因爲適配器是空的。我建議你在這裏閱讀Android活動生命週期:https://developer.android.com/training/basics/activity-lifecycle/index.html,特別是暫停和恢復。這是一個完全不同的問題,如果這個鏈接不起作用,我會建議用更多的細節來開啓一個新的問題。 –

+0

謝謝我appreshate它,我將它鏈接在一分鐘,當我創建它 – jcaruso

相關問題