Я пытаюсь создать приложение со списком задач.Я запускаю приложение и вставляю значения через EditText в базу данных SQLite, но когда я открываю его, значения устанавливаются в ноль.Что я делаю не так?
Это действия:
1.Database
DatabaseHandler.java
public class DatabaseHandler extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "taskdb";
private static final int DATABASE_VERSION = 1;
private static final String TABLE_TASKS = "tasks";
private static final String KEY_TASK_ID = "_id";
private static final String KEY_TASK_NAME = "name";
private static final String KEY_TASK_DATE = "date";
public DatabaseHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_TASKS_TABLE = "CREATE TABLE " + TABLE_TASKS + "(" + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
KEY_TASK_NAME + " TEXT," + KEY_TASK_DATE + " TEXT" + ")";
db.execSQL(CREATE_TASKS_TABLE);}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS tasks" + TABLE_TASKS);
onCreate(db);
}
public void addTask(Task task) {
SQLiteDatabase db= this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_TASK_NAME, task.getTaskName());
values.put(KEY_TASK_DATE, task.getTaskDate());
db.insert(TABLE_TASKS, null, values);
db.close();
}
public ArrayList<Task> getAllTasks() {
String[] columns = {
KEY_TASK_ID,
KEY_TASK_NAME,
KEY_TASK_DATE};
ArrayList<Task> taskList = new ArrayList<>();
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(TABLE_TASKS,
columns,
null, null, null, null, null);
if(cursor != null) {
cursor.moveToFirst();
do {
Task task = new Task(
parseInt(cursor.getString(0)),
cursor.getString(1),
cursor.getString(2));
taskList.add(task);
}
while (cursor.moveToNext());
}
cursor.close();
db.close();
return taskList;
}
}
2.Деятельность, в которой яиметь EditText
AddTaskActivity.java
public class AddTaskActivity extends AppCompatActivity {
TextView addNewTask, setStartTime, setEndTime;
EditText addTaskName;
TimePicker timePicker1, timePicker2;
int hour1, minute1;
int hour2, minute2;
String theNewTask;
Button addTaskButton;
TasksListActivity tla;
DatabaseHandler dth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_task);
dth = new DatabaseHandler(this);
addNewTask = findViewById(R.id.addNewTask);
setStartTime = findViewById(R.id.setStartTime);
setEndTime = findViewById(R.id.setEndTime);
addTaskName = findViewById(R.id.addTaskName);
timePicker1 = findViewById(R.id.timePicker1);
timePicker2 = findViewById(R.id.timePicker2);
addTaskButton = findViewById(R.id.addTaskButton);
addTaskButton.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
String name = addTaskName.getText().toString();
Task task = new Task();
task.setTaskName(name);
task.setTaskDate("date");
dth.addTask(task);
Intent intent = new Intent(AddTaskActivity.this, TasksListActivity.class);
startActivity(intent);
}
}
);
}
}
3.Объект класса
Task.java
public class Task {
String tTaskName, tTaskDate;
int ID;
public Task(int ID, String tTaskName, String tTaskDate){
this.tTaskName = tTaskName;
this.tTaskDate = tTaskDate;
this.ID =ID;
}
public Task(){}
// Getters and setters for all attributes
}
4.Адаптер для RecyclerView
TaskAdapter.java
public class TaskAdapter extends RecyclerView.Adapter<TaskAdapter.ViewHolder> {
private ArrayList<Task> tasksList;
private Context mContext;
public TaskAdapter(ArrayList<Task> tasksList, Context mContext){
this.tasksList = tasksList;
this.mContext = mContext;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.task_item, parent, false);
ViewHolder holder = new ViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
Task stringTask = tasksList.get(position);
holder.taskText.setText(stringTask.getTaskName());
holder.dateText.setText(stringTask.getTaskDate());
}
@Override
public int getItemCount() {
return tasksList == null ? 0:tasksList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
View view1;
TextView taskText, dateText;
RelativeLayout relativeLayout;
public ViewHolder(View itemView) {
super(itemView);
view1 = itemView.findViewById(R.id.view1);
taskText = itemView.findViewById(R.id.taskTextView);
dateText = itemView.findViewById(R.id.dateTextView);
relativeLayout = itemView.findViewById(R.id.recyclerView);
}
}
}
5.Деятельность, в которой должны отображаться данные
TasksListActivity.java
public class TasksListActivity extends AppCompatActivity {
RecyclerView recyclerView;
TaskAdapter taskAdapter;
LinearLayoutManager layoutManager;
ArrayList<Task> tasksList;
DatabaseHandler dth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tasks_list);
BottomNavigationView bottomNavigationView = findViewById(R.id.bottomNavigation);
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
switch (menuItem.getItemId()) {
case R.id.taskListItem:
Intent intent1 = new Intent(TasksListActivity.this, TasksListActivity.class);
startActivity(intent1);
break;
case R.id.addTasks:
Intent intent5 = new Intent(TasksListActivity.this, AddTaskActivity.class);
startActivity(intent5);
break;
case R.id.noteListItem:
Intent intent2 = new Intent(TasksListActivity.this, NotesListActivity.class);
startActivity(intent2);
break;
}
return true;
}
});
recyclerView = findViewById(R.id.recyclerView);
tasksList = new ArrayList<>();
taskAdapter = new TaskAdapter(tasksList, TasksListActivity.this);
layoutManager = new LinearLayoutManager(getApplicationContext());
dth = new DatabaseHandler(this);
recyclerView.setHasFixedSize(true);
getDataFromSQLite();
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(taskAdapter);
}
private void getDataFromSQLite() {
// AsyncTask is used that SQLite operation not blocks the UI Thread.
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
tasksList.clear();
tasksList.addAll(dth.getAllTasks());
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
taskAdapter.notifyDataSetChanged();
}
}.execute();
}
}