Проблема с обработчиком нажатия в viewpager2
Здравствуй друг. Столкнулся с такой проблемой. Есть обработчик нажатия во фрагменте, при активации которого вылетает ошибка.
Код фрагмента:
public class Fragment1 extends Fragment {
EditText dateBox, clientBox, docBox, orderBox, noteBox, timeBox;
DatabaseHelper sqlHelper;
SQLiteDatabase db;
Cursor userCursor;
long userID = 0;
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_fragment1, container, false);
dateBox = view.findViewById(R.id.date);
docBox = view.findViewById(R.id.document);
clientBox = view.findViewById(R.id.client);
timeBox = view.findViewById(R.id.time);
orderBox = view.findViewById(R.id.order);
noteBox = view.findViewById(R.id.note);
Button but = view.findViewById(R.id.saveBut);
but.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ContentValues cv = new ContentValues();
cv.put(DatabaseHelper.COLUMN_DATE, dateBox.getText().toString());
cv.put(DatabaseHelper.COLUMN_CL, clientBox.getText().toString());
cv.put(DatabaseHelper.COLUMN_DOC, docBox.getText().toString());
cv.put(DatabaseHelper.COLUMN_TIME, timeBox.getText().toString());
cv.put(DatabaseHelper.COLUMN_ORDER, orderBox.getText().toString());
cv.put(DatabaseHelper.COLUMN_NOTE, noteBox.getText().toString());
if (userID > 0) {
db.update(DatabaseHelper.TABLE, cv, DatabaseHelper.COLUMN_ID + "=" + String.valueOf(userID), null);
} else {
db.insertOrThrow(DatabaseHelper.TABLE, null, cv);
}
}
});
Intent intent= new Intent();
Bundle bundle = intent.getExtras();
if (bundle != null) {
userID = bundle.getLong("id");
}
if (userID > 0) {
userCursor = db.rawQuery(" select * from "
+ DatabaseHelper.TABLE
+ " where "
+ DatabaseHelper.COLUMN_ID
+ " =? ",
new String[]{String.valueOf(userID)});
userCursor.moveToFirst();
dateBox.setText(userCursor.getString(3));
clientBox.setText(userCursor.getString(1));
docBox.setText(userCursor.getString(4));
timeBox.setText(userCursor.getString(5));
orderBox.setText(userCursor.getString(2));
noteBox.setText(userCursor.getString(6));
userCursor.close();
}
return view;
}
}
Ошибка:
03-12 09:48:46.970 4191-4191/com.example.application E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.application, PID: 4191
java.lang.NullPointerException: Attempt to invoke virtual method 'long android.database.sqlite.SQLiteDatabase.insertOrThrow(java.lang.String, java.lang.String, android.content.ContentValues)' on a null object reference
at com.example.application.Fragment1$3.onClick(Fragment1.java:75)
at android.view.View.performClick(View.java:4756)
at android.view.View$PerformClick.run(View.java:19749)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
03-12 09:48:47.032 1674-1956/system_process E/eglCodecCommon: glUtilsParamSize: unknow param 0x00008cdf
03-12 09:48:47.032 1674-1956/system_process E/eglCodecCommon: glUtilsParamSize: unknow param 0x00008824
Ответы (1 шт):
Автор решения: Arty Morris
→ Ссылка
По видимому вы забыли инициализировать базу
sqlHelper = new DatabaseHelper(context);
db = sqlHelper.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(DatabaseHelper.COLUMN_DATE, dateBox.getText().toString());
cv.put(DatabaseHelper.COLUMN_CL, clientBox.getText().toString());
cv.put(DatabaseHelper.COLUMN_DOC, docBox.getText().toString());
cv.put(DatabaseHelper.COLUMN_TIME, timeBox.getText().toString());
cv.put(DatabaseHelper.COLUMN_ORDER, orderBox.getText().toString());
cv.put(DatabaseHelper.COLUMN_NOTE, noteBox.getText().toString());
if (userID > 0) {
db.update(DatabaseHelper.TABLE, cv, DatabaseHelper.COLUMN_ID + "=" + String.valueOf(userID), null);
} else {
db.insertOrThrow(DatabaseHelper.TABLE, null, cv);
}
db.close();
sqlHelper.close();