KIGH小橙子 2020-06-16 01:58 采纳率: 0%
浏览 274

Android开发简易记事本,信息存储数据库出现错误

在用Android studio开发简易记事本的时候,存储信息阶段总是显示保存失败。这是返回、清空、保存信息部分的代码。这里应该是没有问题的

 public void onClick(View v){
            switch (v.getId()){
                case R.id.note_back:
                    finish();
                    break;
                case R.id.delete:
                    content.setText("");
                    break;
                case R.id.note_save:
                    String noteContent = content.getText().toString().trim();
                    if(noteContent.length()>0){
                        if (mSQLiteHelper.insertData(noteContent, DBUtils.getTime())){
                            showToast("保存成功");
                            setResult(2);
                            finish();
                        }else {
                            showToast("保存失败");
                        }
                    }else{
                        showToast("保存的记录不能为空!");
                    }
                break;
            }
        }

下面是封装记录信息的代码

package cn.itcast.notepad.bean;

public class NotepadBean {
    private String id;
    private String notepadContent;   //内容
    private String notepadTime;    //时间
    public String getId(){
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }

    public String getNotepadContent(){
        return notepadContent;
    }
    public void setNotepadContent(String notepadContent) {
        this.notepadContent = notepadContent;
    }

    public String getNotepadTime() {
        return notepadTime;
    }

    public void setNotepadTime(String notepadTime) {
        this.notepadTime = notepadTime;
    }
}



package cn.itcast.notepad.adapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import java.util.List;

import cn.itcast.notepad.R;
import cn.itcast.notepad.bean.NotepadBean;

public class NotepadAdapter extends BaseAdapter {
    private LayoutInflater layoutInflater;
    private List<NotepadBean> list;

    public NotepadAdapter(Context context, List<NotepadBean> list){
        this.layoutInflater = LayoutInflater.from(context);
        this.list = list;
    }
    @Override
    public int getCount() {
        return list == null? 0 : list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder;
        if (convertView==null){
            convertView = layoutInflater.inflate(R.layout.notepad_item_layout,null);
            viewHolder = new ViewHolder(convertView);
            convertView.setTag(viewHolder);
        }else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
        NotepadBean noteInfo = (NotepadBean) getItem(position);
        viewHolder.tvNotepadContent.setText(noteInfo.getNotepadContent());
        viewHolder.tvNotepadTime.setText(noteInfo.getNotepadTime());
        return convertView;
    }

    class ViewHolder{
        TextView tvNotepadContent;
        TextView tvNotepadTime;
        public ViewHolder(View view){
            tvNotepadContent = (TextView) view.findViewById(R.id.item_content);
            tvNotepadTime =(TextView) view.findViewById(R.id.item_time);
        }
    }
}

创建数据库的代码

package cn.itcast.notepad.utils;

import java.text.SimpleDateFormat;
import java.util.Date;

public class DBUtils {
    public static final String DATABASE_NAME = "Notepad";
    public static final String DATABASE_TABLE = "Note";
    public static final int DATABASE_VERION = 1;

    public static final String NOTEPAD_ID = "id";
    public static final String NOTEPAD_CONTENT = "content";
    public static final String NOTEPAD_TIME = "notetime";

    public static final String getTime(){
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        Date date = new Date(System.currentTimeMillis());
        return simpleDateFormat.format(date);
    }
}



package cn.itcast.notepad.database;

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

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

import cn.itcast.notepad.bean.NotepadBean;
import cn.itcast.notepad.utils.DBUtils;

public class SQLiteHelper extends SQLiteOpenHelper {
    private SQLiteDatabase sqLiteDatabase;
    public SQLiteHelper(Context context){
        super(context, DBUtils.DATABASE_NAME, null, DBUtils.DATABASE_VERION);
        sqLiteDatabase = this.getWritableDatabase();
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table "+DBUtils.DATABASE_TABLE+"("+DBUtils.NOTEPAD_ID+
                " integer primary key autoincrement,"+ DBUtils.NOTEPAD_CONTENT +
                "text," + DBUtils.NOTEPAD_TIME+ "text)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }
    //添加数据
    public boolean insertData (String userContent,String userTime){
        ContentValues contentValues = new ContentValues();
        contentValues.put(DBUtils.NOTEPAD_CONTENT,userContent);
        contentValues.put(DBUtils.NOTEPAD_TIME,userTime);
        return
                sqLiteDatabase.insert(DBUtils.DATABASE_TABLE,null,contentValues)>0;
    }
    //删除数据
    public boolean deleteData(String id){
        String sql = DBUtils.NOTEPAD_ID+"=?";
        String[] contentValuesArray=new String[]{String.valueOf(id)};
        return
                sqLiteDatabase.delete(DBUtils.DATABASE_TABLE,sql,contentValuesArray)>0;
    }
    //修改数据
    public boolean updateData(String id,String content,String userYear){
        ContentValues contentValues = new ContentValues();
        contentValues.put(DBUtils.NOTEPAD_CONTENT,content);
        contentValues.put(DBUtils.NOTEPAD_TIME,userYear);
        String sql = DBUtils.NOTEPAD_ID+"=?";
        String[] strings = new String[]{id};
        return
                sqLiteDatabase.update(DBUtils.DATABASE_TABLE,contentValues,sql,strings)>0;
    }
    //查询数据
    public List<NotepadBean> query(){
        List<NotepadBean> list = new ArrayList<NotepadBean>();
        Cursor cursor=sqLiteDatabase.query(DBUtils.DATABASE_TABLE,null,null,null,
                null,null,DBUtils.NOTEPAD_ID+" desc");
        if (cursor!=null){
            while (cursor.moveToNext()){
                NotepadBean noteInfo = new NotepadBean();
                String id = String.valueOf(cursor.getInt
                        (cursor.getColumnIndex(DBUtils.NOTEPAD_ID)));
                String content = cursor.getString(cursor.getColumnIndex
                        (DBUtils.NOTEPAD_CONTENT));
                String time = cursor.getString(cursor.getColumnIndex
                        (DBUtils.NOTEPAD_TIME));
                noteInfo.setId(id);
                noteInfo.setNotepadContent(content);
                noteInfo.setNotepadTime(time);
                list.add(noteInfo);
            }
            cursor.close();
        }
        return list;
    }
}

错误报告:图片说明
到底是哪里出了问题呀....好绝望

求大佬指点0.0

  • 写回答

3条回答 默认 最新

  • JMchen123 2020-06-30 09:37
    关注

    换一种数据存储方法吧 我给你推荐一个依赖 建表存取数据特别方便
    implementation 'org.xutils:xutils:3.4.0'
    使用前先在Application中初始化

                    x.Ext.init(this);
            x.Ext.setDebug(false);
    

    然后建一个数据库管理类

         public class DBManager {
        private static final String TAG = DBManager.class.getSimpleName();
    
        public static DBManager dbManager;
    
        public static DBManager getDbManager() {
            if (dbManager == null) {
                dbManager = new DBManager();
            }
            return dbManager;
        }
    
        private DBManager() {
    
        }
    
        public DbManager getConfig() {
            File file = new File(Constant.getDbPath());//这里是自己自定义存放数据库文件的地址
            DbManager.DaoConfig daoConfig = new DbManager.DaoConfig()
                    .setDbName(Constant.DB_NAME)
                    .setDbVersion(1)
                    .setDbDir(file)
                    .setAllowTransaction(true)//开启实务
                    .setDbOpenListener(new DbManager.DbOpenListener() {
                        @Override
                        public void onDbOpened(DbManager db) {
                            db.getDatabase().enableWriteAheadLogging();
                        }
                    })
                    .setDbUpgradeListener(new DbManager.DbUpgradeListener() {
                        @Override
                        public void onUpgrade(DbManager db, int oldVersion, int newVersion) {
    
                        }
                    })
                    .setTableCreateListener(new DbManager.TableCreateListener() {
                        @Override
                        public void onTableCreated(DbManager db, TableEntity<?> table) {
    
                        }
                    });
            return x.getDb(daoConfig);
        }
    }
    

    然后再新建你想要的实体类

    ```
            @Table(name = "recycleBin")(这句话就是代表建表了)
            public class NotepadBean {
        @Column(name = "id", isId = true, autoGen = true)(这里则是自增ID) 
    private String id;
        @Column(name = "notepadContent")(以下则都是表字段名称)
    private String notepadContent;   //内容
        @Column(name = "notepadTime")
    private String notepadTime;    //时间
    
    public String getId(){
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    
    public String getNotepadContent(){
        return notepadContent;
    }
    public void setNotepadContent(String notepadContent) {
        this.notepadContent = notepadContent;
    }
    
    public String getNotepadTime() {
        return notepadTime;
    }
    
    public void setNotepadTime(String notepadTime) {
        this.notepadTime = notepadTime;
    }
    

    }

    最后再根据你的实体类去建一个添删改查的Dao
    这里就根据你的实体类来
    
                public class NotepadBeanDao {
    
    private static DbManager dbManager;
    
    static {
        dbManager = DBManager.getDbManager().getConfig();//这里是打开并获取数据管理配置,然后就可以使用添删改查了
    }
    
    /**
     * 添加数据
     *
     * @param recyclebin
     */
    public static void addData(NotepadBean  notepad) {
        try {
            dbManager.save(notepad);
        } catch (DbException e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 查询所有数据
     */
    public static List<NotepadBean > findData() {
        try {
            return dbManager.findAll(NotepadBean .class);
        } catch (DbException e) {
            e.printStackTrace();
            return null;
        }
    }
    
    /**
     * 删除所有数据
     */
    public static void deleteAllData() {
        try {
            //直接删除
            dbManager.delete(NotepadBean .class);
        } catch (DbException e) {
            e.printStackTrace();
        }
    }
    
    DbManager这个类这中还有很多添删改查的方法,根据需求可做调整修改
    调用的方法就不写了,
    比如添加数据,直接把你的实体类中俩参数set数据,然后调用Dao中的addData()把你的实体类传进去就存好啦
    
    评论

报告相同问题?