m0_74474210 2024-05-16 22:44 采纳率: 93.8%
浏览 0
已结题

为什么写不进去数据?怎么修改,这个是handle进程的一个子进程


case RECEIVE_SUCCESS:  //接收成功
                    String receiveResult = (String) msg.obj;
                    String w=receiveResult.substring(receiveResult.indexOf(":")+1,receiveResult.lastIndexOf("#"));
                    weight.setText(w+"g");
                    if (receiveResult.contains(",time1_on")){
                        s1.setChecked(true);
                    }
                    if (receiveResult.contains(",time1_off")){
                        s1.setChecked(false);
                    }
                    if (receiveResult.contains(",time2_on")){
                        s2.setChecked(true);
                    }
                    if (receiveResult.contains(",time2_off")){
                        s2.setChecked(false);
                    }
                    if (receiveResult.contains(",time3_on")){
                        s3.setChecked(true);
                    }
                    if (receiveResult.contains(",time3_off")){
                        s3.setChecked(false);
                    }
                    if (receiveResult.contains(",time4_on"))
                        s4.setChecked(true);
                    if (receiveResult.contains(",time4_off"))
                        s4.setChecked(false);
                    if (receiveResult.contains("time5_on"))
                        s5.setChecked(true);
                    if (receiveResult.contains("time5_off"))
                        s5.setChecked(false);
                    if  (receiveResult.contains(",start")) {
                        //Toast.makeText(MainActivity.this, "start", Toast.LENGTH_SHORT).show();
                        SQLiteDatabase db=dataBase.getWritableDatabase();
                        Calendar calendar=Calendar.getInstance();
                        Date date1=calendar.getTime();
                        calendar.add(Calendar.MINUTE,30);
                        Date date2=calendar.getTime();
                        ContentValues contentValues=new ContentValues();
                        contentValues.put(DataBase.COLUMN_ST,String.valueOf(date1));
                        if(receiveResult.contains(",stop")){
                            Toast.makeText(MainActivity.this, "stop", Toast.LENGTH_SHORT).show();
                            contentValues.put(DataBase.COLUMN_SW,Integer.parseInt(weight.getText().toString()));
                        }
                        Timer timer = new Timer();
                        if (w.equals(0)){
                            Date endtime=calendar.getTime();
                            contentValues.put(DataBase.COLUMN_ET,String.valueOf(endtime));
                            contentValues.put(DataBase.COLUMN_EW,0);
                            db.insert(DataBase.TABLE2,null,contentValues);
                            db.close();
                            timer.cancel();
                        }
                        else {
                            TimerTask task = new TimerTask() {
                                @Override
                                public void run() {
                                    contentValues.put(DataBase.COLUMN_ET,String.valueOf(date2));
                                    contentValues.put(DataBase.COLUMN_ET,Integer.parseInt(w));
                                    db.insert(DataBase.TABLE2,null,contentValues);
                                    db.close();
                                }
                            };
                            timer = new Timer(true);
                            //timer.schedule(task,strToDateLong("2024-05-16 00:03:00"));
                            timer.schedule(task,date2);
                        }
                    }
                    break;
            }
  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2024-05-16 22:44
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    【您想要解决的问题】:您提问的目的是解决在Android应用中,通过handle进程的子进程接收数据并尝试将数据写入数据库时遇到的写入失败的问题。

    【问题出现原因】:根据您提供的代码片段,问题可能出现在以下几个方面:

    1. 数据库操作权限问题:确保您的应用有权限对数据库进行读写操作。
    2. 数据库表结构问题:检查DataBase.TABLE2表是否存在,以及字段DataBase.COLUMN_ST, DataBase.COLUMN_SW, DataBase.COLUMN_ET, DataBase.COLUMN_EW是否正确定义。
    3. 数据类型匹配问题:DataBase.COLUMN_SWDataBase.COLUMN_EW字段的数据类型是否与您尝试插入的数据类型匹配。
    4. 错误的数据库关闭时机:在TimerTask内部关闭数据库连接可能会导致问题。
    5. TimerTask中的数据库操作:在TimerTask中执行数据库操作可能不是线程安全的,需要确保线程安全。

    【问题解决方案】:以下是一些建议来解决您遇到的问题:

    1. 确保数据库操作权限:检查AndroidManifest.xml文件,确保您的应用具有读写数据库的权限。
    2. 检查数据库表结构:使用SQLite数据库浏览器检查DataBase.TABLE2表的结构,确保字段名和类型正确。
    3. 确保数据类型匹配:检查DataBase.COLUMN_SWDataBase.COLUMN_EW字段的数据类型,确保它们与您尝试插入的数据类型一致。
    4. 调整数据库关闭时机:不要在TimerTask内部关闭数据库连接,而是在任务完成后关闭。
    5. 使用线程安全的数据库操作:考虑使用SQLiteOpenHelperContentValues的线程安全方法,或者在主线程中执行数据库操作。

    【提供代码】:以下是修改后的代码示例,注意这只是一个示例,您需要根据实际情况调整:

    case RECEIVE_SUCCESS:
        // ... 省略其他代码 ...
    
        if (receiveResult.contains(",start")) {
            SQLiteDatabase db = dataBase.getWritableDatabase();
            try {
                Calendar calendar = Calendar.getInstance();
                Date date1 = calendar.getTime();
                calendar.add(Calendar.MINUTE, 30);
                Date date2 = calendar.getTime();
                ContentValues contentValues = new ContentValues();
                contentValues.put(DataBase.COLUMN_ST, String.valueOf(date1));
                if (receiveResult.contains(",stop")) {
                    contentValues.put(DataBase.COLUMN_SW, Integer.parseInt(weight.getText().toString()));
                }
                if (w.equals("0")) {
                    Date endtime = calendar.getTime();
                    contentValues.put(DataBase.COLUMN_ET, String.valueOf(endtime));
                    contentValues.put(DataBase.COLUMN_EW, 0);
                    db.insert(DataBase.TABLE2, null, contentValues);
                } else {
                    // 确保在主线程中执行数据库操作
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            contentValues.put(DataBase.COLUMN_ET, String.valueOf(date2));
                            contentValues.put(DataBase.COLUMN_EW, Integer.parseInt(w));
                            db.insert(DataBase.TABLE2, null, contentValues);
                        }
                    }).start();
                }
            } finally {
                db.close();
            }
        }
        break;
    

    【代码运行方式】:这段代码应该在您的Android应用中运行,确保您的应用已经设置了SQLite数据库和相应的表。

    【代码预期运行结果】:

    如果数据写入成功,您应该在数据库的`DataBase.TABLE2`表中看到新插入的记录。
    

    【推荐相关链接】:

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月24日
  • 已采纳回答 5月16日
  • 创建了问题 5月16日

悬赏问题

  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Linux权限管理相关操作(求解答)
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表
  • ¥15 DbVisualizer Pro 12.0.7 sql commander光标错位 显示位置与实际不符
  • ¥15 求一份STM32F10X的I2S外设库
  • ¥15 android 打包报错
  • ¥15 关于stm32的问题
  • ¥15 ncode振动疲劳分析中,noisefloor如何影响PSD函数?