当我将 OnResume 函数用于带有数据库的简单待办事项列表应用程序时,OnCreate 函数被删除

如何解决当我将 OnResume 函数用于带有数据库的简单待办事项列表应用程序时,OnCreate 函数被删除

我正在尝试制作一个简单的待办事项列表功能,将任务添加到回收站视图中。

我从不同的活动中添加了一个新任务,并尝试使用 OnResume 将其添加到我的主要活动中,但是当我使用 OnResume 函数时,我的所有任务都消失了,因为我相信 OnResume 以某种方式覆盖了我的 OnCreate。

这是没有我的 OnResume 时的样子: [在此处输入图片说明][1] [1]:https://i.stack.imgur.com/ZXCfs.jpg

当我添加 OnResume 时,它​​只是空白,任务也不会添加...

编辑:当我在添加任务活动中时,它给出了一个错误: 尝试在空对象引用上调用虚拟方法“java.util.ArrayList com.example.todolist.TaskAdapter.getTaskItemList()”

不知道为什么它会因为它之前有代码而显示为 null,也尝试在不清除任务列表的情况下执行此操作,但它出现了相同的问题。

这是我的主要活动:

public class MainActivity extends AppCompatActivity {

    private RecyclerView recyclerView;
    private TaskAdapter taskAdapter;
    private RecyclerView.LayoutManager layoutManager;
    private DatabaseHandler dbHandler;
    private ArrayList<TaskItem> taskList;
    private FloatingActionButton fAButton;
    private static final String EDIT = "Edit";
    public boolean complete;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        recyclerView = findViewById(R.id.recyclerView);
        fAButton = findViewById(R.id.floatingActionButton2);

        dbHandler = new DatabaseHandler(this,null,1);
        populateDB();
        populateTaskList();

        recyclerView.setHasFixedSize(true);
        layoutManager = new LinearLayoutManager(getApplicationContext());
        taskAdapter = new TaskAdapter(taskList,this);

        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setAdapter(taskAdapter);

        taskAdapter.setOnItemClickListener(new TaskAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(int position) {
                TaskItem editTask = taskList.get(position);
                Intent intent = new Intent(MainActivity.this,EditActivity.class);
                intent.putExtra(EDIT,editTask);
                startActivity(intent);
            }
        });

        taskAdapter.setOnItemLongClickListener(new TaskAdapter.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(int position) {
                int result = dbHandler.deleteTask(taskList.get(position));
                System.out.println(result);
                populateTaskList();
                taskAdapter.setTaskItemList(taskList);
                taskAdapter.notifyDataSetChanged();
                return true;
            }
        });

        fAButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this,AddActivity.class);
                startActivity(intent);
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu){
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.completed,menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.complete:
                if (complete = true){
                    item.setTitle("To Do");
                    complete = false;
                    taskAdapter.setCompleted(complete);
                }else{
                    item.setTitle("Complete");
                    complete = true;
                    taskAdapter.setCompleted(complete);
                }
                return true;
        }
        return true;
    }

    private void populateDB(){
        dbHandler.addTask(new TaskItem("Finish Assignment 5","4/6/2021","Finish task 1 and task 2","LOW","NO"));
        dbHandler.addTask(new TaskItem("Finish Assignment 4","1/6/2021","NO"));
        dbHandler.addTask(new TaskItem("Submit portfolio","10/6/2021","Make the LSR then submit it","HIGH","NO"));
        dbHandler.addTask(new TaskItem("Finish Assignment 3","24/5/2021","YES"));
        dbHandler.addTask(new TaskItem("Finish Assignment 1","4/5/2021","YES"));
    }

    private void populateTaskList(){
        if (taskList != null)
            taskList.clear();
        taskList = dbHandler.getAllTasks();
    }

    /*@Override
    protected void onResume() {
        super.onResume();
        populateTaskList();
    }*/
}

这是我的数据库处理程序:

package com.example.todolist;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import androidx.annotation.Nullable;

import java.util.ArrayList;
import java.util.List;

public class DatabaseHandler extends SQLiteOpenHelper {
    private static final String DB_NAME = "TaskDB";
    private static final String TABLE_NAME = "Task_Table";

    private static final String KEY_ID = "id";
    private static final String KEY_TITLE = "Title";
    private static final String KEY_DATE = "Date";
    private static final String KEY_DETAILS = "Details";
    private static final String KEY_PRIORITY = "Priority";
    private static final String KEY_COMPLETE = "Complete";

    public DatabaseHandler(@Nullable Context context,@Nullable String name,@Nullable SQLiteDatabase.CursorFactory factory,int version) {
        super(context,name,factory,version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String create_table = "CREATE TABLE " + TABLE_NAME + "(" + KEY_ID + " INTEGER PRIMARY KEY,"
                + KEY_TITLE + " TEXT," + KEY_DATE + " TEXT," + KEY_DETAILS + " TEXT," + KEY_PRIORITY +
                " TEXT," + KEY_COMPLETE + " TEXT)";
        db.execSQL(create_table);
        System.out.println("Table created");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) {
        //db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        //onCreate(db);
        //System.out.println("Table dropped");
    }

    public long addTask(TaskItem task){
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(KEY_TITLE,task.getTitle());
        contentValues.put(KEY_DATE,task.getDate());
        contentValues.put(KEY_DETAILS,task.getDetails());
        contentValues.put(KEY_PRIORITY,task.getPriority());
        contentValues.put(KEY_COMPLETE,task.getComplete());

        return db.insert(TABLE_NAME,contentValues);
    }

    public TaskItem getTask(int taskID){
        TaskItem taskItem = null;
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.query(TABLE_NAME,new String[]{KEY_ID,KEY_TITLE,KEY_DATE,KEY_DETAILS,KEY_PRIORITY,KEY_COMPLETE},KEY_ID + "=?",new String[]{String.valueOf(taskID)},null);

        if(cursor != null){
            cursor.moveToFirst();
            taskItem = new TaskItem(cursor.getInt(0),cursor.getString(1),cursor.getString(2),cursor.getString(3),cursor.getString(4),cursor.getString(5));
        }

        return taskItem;
    }

    public ArrayList<TaskItem> getAllTasks(){
        ArrayList<TaskItem> taskList = new ArrayList<TaskItem>();
        String selectQuery = "SELECT * FROM " + TABLE_NAME;

        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(selectQuery,null);

        if(cursor.moveToFirst()){
            do{
                TaskItem taskItem = new TaskItem();
                taskItem.setId(Integer.parseInt(cursor.getString(0)));
                taskItem.setTitle(cursor.getString(1));
                taskItem.setDate(cursor.getString(2));
                taskItem.setDetails(cursor.getString(3));
                taskItem.setPriority(cursor.getString(4));
                taskItem.setComplete(cursor.getString(5));
                taskList.add(taskItem);
            }while (cursor.moveToNext());
        }
        return taskList;
    }

    public int deleteTask(TaskItem taskItem){
        SQLiteDatabase db = this.getWritableDatabase();
        return db.delete(TABLE_NAME,new String[]{String.valueOf(taskItem.getId())});
    }

    public int updateTask(int taskID){
        TaskItem task = new TaskItem();
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(KEY_ID,task.getTitle());
        contentValues.put(KEY_TITLE,task.getComplete());
        return db.update(TABLE_NAME,contentValues,KEY_ID + "= ?",new String[]{String.valueOf(taskID)});
    }
}

我的添加活动:

public class AddActivity extends AppCompatActivity {
    public EditText addTitle,addDate,addDetail;
    public CheckBox priorityBox;
    DatePickerDialog picker;
    DatabaseHandler dbHandler;
    TaskAdapter taskAdapter;
    private ArrayList<TaskItem> taskList = new ArrayList<TaskItem>();
    public String title,date,detail,priority;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add);

        addTitle = findViewById(R.id.addTitle);
        addDate = findViewById(R.id.addDate);
        addDetail = findViewById(R.id.addDetails);
        priorityBox = findViewById(R.id.addPriority);

        final Calendar cldr = Calendar.getInstance();
        int day = cldr.get(Calendar.DAY_OF_MONTH);
        int month = cldr.get(Calendar.MONTH);
        int year = cldr.get(Calendar.YEAR);
        addDate.setText(day + "/" + (month + 1) + "/" + year);

        addDate.setInputType(InputType.TYPE_NULL);
        addDate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // date picker dialog
                picker = new DatePickerDialog(AddActivity.this,new DatePickerDialog.OnDateSetListener() {
                            @Override
                            public void onDateSet(DatePicker view,int year,int monthOfYear,int dayOfMonth) {
                                addDate.setText(dayOfMonth + "/" + (monthOfYear + 1) + "/" + year);
                            }
                        },year,month,day);
                picker.getDatePicker().setMinDate(System.currentTimeMillis());
                picker.show();
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu){
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.tick,menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
                title = addTitle.getText().toString();
                date = addDate.getText().toString();
                detail = addDetail.getText().toString();
                priority = "LOW";

                priorityBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                    @Override
                    public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
                        if (isChecked)
                            priority = "HIGH";
                        else
                            priority = "LOW";
                    }
                });

                //taskList = taskAdapter.getTaskItemList();
                dbHandler = new DatabaseHandler(this,1);
                dbHandler.addTask(new TaskItem(title,priority,"NO"));
                //taskList.add(new TaskItem(title,"NO"));
                taskList = taskAdapter.getTaskItemList();
                taskList.add(new TaskItem("title","date","detail","priority","NO"));
                taskAdapter.setTaskItemList(taskList);
                taskAdapter.notifyDataSetChanged();
                finish();
                //Intent intent = new Intent(AddActivity.this,MainActivity.class);
                //startActivity(intent);

        return true;
    }
}

最后是我的任务项:

public class TaskItem implements Parcelable {
    private int id;
    private String title;
    private String date;
    private String details;
    private String priority;
    private String complete;

    public TaskItem(String title,String date,String details,String priority,String complete) {
        this.title = title;
        this.date = date;
        this.details = details;
        this.priority = priority;
        this.complete = complete;
    }

    public TaskItem() {

    }

    public TaskItem(int id,String title,String complete) {
        this.id = id;
        this.title = title;
        this.date = date;
        this.details = details;
        this.priority = priority;
        this.complete = complete;
    }

    public int getId() {
        return id;
    }

    public String getTitle() {
        return title;
    }

    public String getDate() {
        return date;
    }

    public String getDetails() {
        return details;
    }

    public String getPriority() {
        return priority;
    }

    public String getComplete() {
        return complete;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public void setDetails(String details) {
        this.details = details;
    }

    public void setPriority(String priority) {
        this.priority = priority;
    }

    public void setComplete(String complete) {
        this.complete = complete;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest,int flags) {
        dest.writeInt(id);
        dest.writeString(title);
        dest.writeString(date);
        dest.writeString(details);
        dest.writeString(priority);
        dest.writeString(complete);
    }

    public TaskItem(Parcel parcel){
        id = parcel.readInt();
        title = parcel.readString();
        date = parcel.readString();
        details = parcel.readString();
        priority = parcel.readString();
        complete = parcel.readString();
    }

    public static final Parcelable.Creator<TaskItem> CREATOR = new Parcelable.Creator<TaskItem>() {

        @Override
        public TaskItem createFromParcel(Parcel parcel) {
            return new TaskItem(parcel);
        }

        @Override
        public TaskItem[] newArray(int size) {
            return new TaskItem[0];
        }
    };
}

我认为我的数据库处理程序很好,所以我假设我的添加活动或主活动有问题。

解决方法

你在简历上调用函数 populateTaskList

    private void populateTaskList(){
    if (taskList != null)
        taskList.clear();
    taskList = dbHandler.getAllTasks();
}

所以基本上你在调用该函数时所做的是清除列表,因为它不是空的,而你的 dbHandler.getAllTask​​s() 给你的可能是空列表,所以它是空的。

,

试试这个

protected void onResume() {
    super.onResume();
    populateTaskList();
    taskAdapter.notifyDataSetChanged();
}

你不应该在主线程中与数据库交互

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res