2016-01-24 2 views
-1

Я абсолютно новичок для Android. Я начал изучать Android 8 дней назад. Теперь я получаю ошибку при использовании Sqlite Database в Fragment. Пожалуйста, что случилось с моим кодом?Ошибка с использованием помощника базы данных Sqlite во Фрагменте при вставке данных в Android

Мой помощник базы данных класса

public class DatabaseHelper extends SQLiteOpenHelper { 

    private static final int DATABASE_VERSION = 1; 
    private static final String DATABASE_NAME = "todo.db"; 
    private static final String TABLE_NAME = "task"; 
    private static final String COLUMN_ID = "id"; 
    private static final String COLUMN_DESCRIPTION = "description"; 
    private static final String COLUMN_DATE ="date"; 
    private static final String COLUMN_DONE = "done"; 
    private static final String CREATE_TABLE = "CREATE TABLE "+TABLE_NAME+" ("+COLUMN_ID+" INTEGER PRIMARY KEY AUTOINCREMENT,"+COLUMN_DESCRIPTION+" TEXT,"+ 
    COLUMN_DATE+" DATE,"+COLUMN_DONE+" BOOLEAN)"; 
    SQLiteDatabase db; 

    public DatabaseHelper(Context context) 
    { 
     super(context,DATABASE_NAME,null,DATABASE_VERSION); 
    } 


    @Override 
    public void onCreate(SQLiteDatabase db) 
    { 
     this.db = db; 
     db.execSQL(CREATE_TABLE); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     String query = "DROP TABLE IF EXISTS "+TABLE_NAME; 
     db.execSQL(query); 
     this.onCreate(db); 
    } 

    public void insertTask(Task task) 
    { 
     db = getWritableDatabase(); 
     ContentValues values = new ContentValues(); 
     values.put(COLUMN_DESCRIPTION,task.getDescription()); 
     values.put(COLUMN_DATE,task.getDate().toString()); 
     values.put(COLUMN_DONE,Boolean.FALSE.toString()); 
     db.insert(TABLE_NAME, null, values); 
     db.close(); 
    } 
} 

Это мой класс фрагмент

public class CreateTaskFragment extends Fragment{ 
    private DatabaseHelper dbHelper = new DatabaseHelper(getActivity()); 
    private Button saveBtn; 
    private EditText tfDescription,tfDate; 
    private int yy,mm,dd; 
    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 


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

     tfDescription = (EditText)view.findViewById(R.id.tf_task_description); 
     tfDate = (EditText)view.findViewById(R.id.tf_task_date); 
     tfDate.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       setPickerDate(v); 
      } 
     }); 

     saveBtn = (Button)view.findViewById(R.id.btn_save_task); 
     saveBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       saveTask(); 
      } 
     }); 

     return view; 
    } 

    public void setPickerDate(View v) 
    { 
     final Calendar calendar = Calendar.getInstance(); 
     int yy = calendar.get(Calendar.YEAR); 
     int mm = calendar.get(Calendar.MONTH); 
     int dd = calendar.get(Calendar.DAY_OF_MONTH); 
     DatePickerDialog datePicker = new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() { 
      @Override 
      public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
       String date = String.valueOf(monthOfYear+1)+"/"+String.valueOf(dayOfMonth)+"/"+String.valueOf(year); 
       tfDate.setText(date); 
      } 
     }, yy, mm, dd); 
     datePicker.show(); 
    } 

    public void saveTask() 
    { 
     String description = tfDescription.getText().toString(); 
     String date = tfDate.getText().toString(); 

     if(description.isEmpty()) 
     { 
      Toast.makeText(getActivity().getBaseContext(),"Description is required",Toast.LENGTH_SHORT).show(); 
     } 
     else if(date.isEmpty()) 
     { 
      Toast.makeText(getActivity().getBaseContext(),"Date is required",Toast.LENGTH_SHORT).show(); 
     } 
     else if(description.length()<getResources().getInteger(R.integer.min_description_length)) 
     { 
      String minChar = String.valueOf(getResources().getInteger(R.integer.min_description_length)); 
      Toast.makeText(getActivity().getBaseContext(),"Description should be minium "+minChar+" characters",Toast.LENGTH_SHORT).show(); 
     } 
     else{ 
      //check date 
      SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy"); 
      boolean parseOk = false; 
      Date taskDate = new Date(); 
      try{ 
       taskDate = format.parse(date); 
       Task task = new Task(); 
       task.setDescription(description); 
       task.setDate(taskDate); 
       dbHelper.insertTask(task); 
       parseOk = true; 
      } 
      catch(ParseException e) 
      { 
       parseOk = false; 
      } 

      if(parseOk) 
      { 
       //insert task to database 
       Toast.makeText(getActivity().getBaseContext(),"Task saved",Toast.LENGTH_SHORT).show(); 
      } 
      else{ 
       Toast.makeText(getActivity().getBaseContext(),"Invalid date format",Toast.LENGTH_SHORT).show(); 
      } 
     } 
    } 
} 

При нажатии на кнопку сохранения. Это ошибка.

Это LogCat после того как я нажмите кнопку Сохранить

01-24 15:49:30.007 575-575/? V/InputMethodService: onEvaluateInputViewShown: config.hardKeyboardHidden = 1 
01-24 15:49:30.011 575-597/? E/BinaryDictionaryGetter: Could not find a dictionary pack 
01-24 15:49:30.011 575-597/? E/ActivityThread: Failed to find provider info for com.android.inputmethod.latin.dictionarypack 
01-24 15:49:31.167 1765-1765/? D/AndroidRuntime: Shutting down VM 
01-24 15:49:31.167 1765-1765/? W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0xa6206908) 
01-24 15:49:31.167 1765-1765/? E/AndroidRuntime: FATAL EXCEPTION: main 
01-24 15:49:31.167 1765-1765/? E/AndroidRuntime: java.lang.NullPointerException 
01-24 15:49:31.167 1765-1765/? E/AndroidRuntime:  at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224) 
01-24 15:49:31.167 1765-1765/? E/AndroidRuntime:  at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164) 
01-24 15:49:31.167 1765-1765/? E/AndroidRuntime:  at com.waiyanhein.todo.todo.DatabaseHelper.insertTask(DatabaseHelper.java:46) 
01-24 15:49:31.167 1765-1765/? E/AndroidRuntime:  at com.waiyanhein.todo.todo.CreateTaskFragment.saveTask(CreateTaskFragment.java:100) 
01-24 15:49:31.167 1765-1765/? E/AndroidRuntime:  at com.waiyanhein.todo.todo.CreateTaskFragment$2.onClick(CreateTaskFragment.java:49) 
01-24 15:49:31.167 1765-1765/? E/AndroidRuntime:  at android.view.View.performClick(View.java:4204) 
01-24 15:49:31.167 1765-1765/? E/AndroidRuntime:  at android.view.View$PerformClick.run(View.java:17355) 
01-24 15:49:31.167 1765-1765/? E/AndroidRuntime:  at android.os.Handler.handleCallback(Handler.java:725) 
01-24 15:49:31.167 1765-1765/? E/AndroidRuntime:  at android.os.Handler.dispatchMessage(Handler.java:92) 
01-24 15:49:31.167 1765-1765/? E/AndroidRuntime:  at android.os.Looper.loop(Looper.java:137) 
01-24 15:49:31.167 1765-1765/? E/AndroidRuntime:  at android.app.ActivityThread.main(ActivityThread.java:5041) 
01-24 15:49:31.167 1765-1765/? E/AndroidRuntime:  at java.lang.reflect.Method.invokeNative(Native Method) 
01-24 15:49:31.167 1765-1765/? E/AndroidRuntime:  at java.lang.reflect.Method.invoke(Method.java:511) 
01-24 15:49:31.167 1765-1765/? E/AndroidRuntime:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
01-24 15:49:31.167 1765-1765/? E/AndroidRuntime:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
01-24 15:49:31.167 1765-1765/? E/AndroidRuntime:  at dalvik.system.NativeStart.main(Native Method) 
01-24 15:49:31.167 415-426/? W/ActivityManager: Force finishing activity com.waiyanhein.todo.todo/.MainActivity 
01-24 15:49:31.231 415-426/? D/dalvikvm: GC_FOR_ALLOC freed 1480K, 53% free 6135K/12844K, paused 5ms, total 6ms 
01-24 15:49:31.239 415-418/? D/dalvikvm: GC_CONCURRENT freed 46K, 47% free 6925K/12844K, paused 2ms+1ms, total 10ms 
01-24 15:49:31.251 415-431/? D/dalvikvm: GC_FOR_ALLOC freed 107K, 45% free 7160K/12844K, paused 7ms, total 7ms 
01-24 15:49:31.263 415-418/? D/dalvikvm: GC_CONCURRENT freed 1K, 36% free 8260K/12844K, paused 1ms+0ms, total 10ms 
01-24 15:49:31.263 415-431/? D/dalvikvm: WAIT_FOR_CONCURRENT_GC blocked 3ms 
01-24 15:49:31.267 415-431/? I/dalvikvm-heap: Grow heap (frag case) to 10.614MB for 2536932-byte allocation 
01-24 15:49:31.279 415-423/? D/dalvikvm: GC_FOR_ALLOC freed <1K, 30% free 10737K/15324K, paused 13ms, total 13ms 
01-24 15:49:31.743 415-428/? W/ActivityManager: Activity pause timeout for ActivityRecord{5325c494 u0 com.waiyanhein.todo.todo/.MainActivity} 
01-24 15:49:31.747 415-470/? I/qtaguid: Failed write_ctrl(s 1 10023) res=-1 errno=1 
01-24 15:49:31.747 415-470/? W/NetworkManagementSocketTagger: setKernelCountSet(10023, 1) failed with errno -1 
01-24 15:49:31.791 598-598/? W/EGL_genymotion: eglSurfaceAttrib not implemented 
01-24 15:49:32.359 415-470/? I/qtaguid: Failed write_ctrl(s 0 10062) res=-1 errno=1 
01-24 15:49:32.359 415-470/? W/NetworkManagementSocketTagger: setKernelCountSet(10062, 0) failed with errno -1 
01-24 15:49:42.307 415-428/? W/ActivityManager: Activity destroy timeout for ActivityRecord{5325c494 u0 com.waiyanhein.todo.todo/.MainActivity} 
+0

есть нулевой указатель on line 101 –

+0

В моей базе данных вспомогательный класс? –

+0

В вашей первой строке для onCreateView вы создали новый объект DBHelper, но не присвоили ему переменную DBHelper, вызывающую NULL Pointer excetion – Arshad

ответ

1

Ошибка вы получаете нулевой указатель исключение на линии 101 вашего фрагмента. Трудно сказать, из вашего поста, что представляет линию 101, но я предполагаю, что это линия, которая имеет:

dbHelper.insertTask(task); 

Вы объявляете dbHelper как переменные в верхней части вашего класса, но вы никогда не создать его экземпляр , Вместо этого вы просто позвоните:

new DatabaseHelper(getActivity()); 

Не прикрепляйте его к dbHelper. Измените эту строку на:

dbHelper = new DatabaseHelper(getActivity()); 

Надеемся исправить вашу ошибку.

+0

Я только что обновил свой вопрос, и он все еще бросает ошибки –

+0

Действительно у вас теперь есть другой вопрос, другая проблема , Ответ, который я дал, решил прямой вопрос, о котором вы сообщали. – Chris

+0

Жаль, что сработало. благодаря –

Смежные вопросы