• Android学习笔记 94. 从 Room 数据库中删除数据


    Android学习笔记

    Android 开发者基础知识 (Java) —— Google Developers 培训团队

    第3单元 在后台运行

    第10课 使用Room存储数据

    94. 从 Room 数据库中删除数据
    你会做什么
    • 更新 RoomWordsSample 应用程序以在应用程序关闭时保留数据。
    • 允许用户通过选择选项菜单项来删除所有单词。
    • 允许用户通过滑动列表中的项目来删除特定单词。
    • 或者,在编码挑战中,扩展应用程序以允许用户更新现有单词。
    94.1 只有数据库为空时才初始化数据
    1. 在DAO中添加一个方法来获取一个单词

      @Query("SELECT * from word_table LIMIT 1")
          Word[] getAnyWord();
      
      • 1
      • 2
    2. 更新初始化方法检查数据是否存在

      @Override
      protected Void doInBackground(final Void... params) {
      
             // If we have no words, then create the initial list of words
             if (mDao.getAnyWord().length < 1) {
                 for (int i = 0; i <= words.length - 1; i++) {
                     Word word = new Word(words[i]);
                     mDao.insert(word);
                 }
             }
         return null;
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
    94.2 删除所有单词
    1. 在WordDao接口中添加deleteAll( )并注解

      @Query("DELETE FROM word_table")
      void deleteAll();
      
      • 1
      • 2
    2. 将deleteAll( ) 添加到 WordRepository 类

      private static class deleteAllWordsAsyncTask extends AsyncTask<Void, Void, Void> {
         private WordDao mAsyncTaskDao;
      
         deleteAllWordsAsyncTask(WordDao dao) {
             mAsyncTaskDao = dao;
         }
      
         @Override
         protected Void doInBackground(Void... voids) {
             mAsyncTaskDao.deleteAll();
             return null;
         }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
    3. 将deleteAll( ) 添加到 WordViewModel 类

    94.3 添加选项菜单项以删除所有数据
    1. 添加清除所有数据菜单选项

      @Override
      public boolean onOptionsItemSelected(MenuItem item) {
         int id = item.getItemId();
      
         if (id == R.id.clear_data) {
             // Add a toast just for confirmation
             Toast.makeText(this, "Clearing the data...",
                     Toast.LENGTH_SHORT).show();
      
             // Delete the existing data
             mWordViewModel.deleteAll();
             return true;
         }
      
         return super.onOptionsItemSelected(item);
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
    94.4 删除一个单词
    1. 将deleteWord( ) 添加到 DAO 并对其进行注释

      @Delete
      void deleteWord(Word word);
      
      • 1
      • 2
    2. 将deleteWord( ) 添加到 WordRepository 类

      private static class deleteWordAsyncTask extends AsyncTask<Word, Void, Void> {
         private WordDao mAsyncTaskDao;
      
         deleteWordAsyncTask(WordDao dao) {
             mAsyncTaskDao = dao;
         }
      
         @Override
         protected Void doInBackground(final Word... params) {
             mAsyncTaskDao.deleteWord(params[0]);
             return null;
         }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
    3. 将deleteWord( ) 添加到 WordViewModel 类

      public void deleteWord(Word word) {mRepository.deleteWord(word);}
      
      • 1
    94.5 使用户能够刷掉单词
    1. 启用适配器检测刷过的单词

    项目地址:

    https://github.com/google-developer-training/android-fundamentals-apps-v2/tree/master/RoomWordsWithDelete

    94.6 总结

    编写数据库代码

    • Room 负责在每次执行数据库操作时打开和关闭数据库连接。
    • 将数据访问对象 (DAO) 中的方法注释为@insert@delete@update@query
    • 对于简单的插入、更新和删除,在DAO中的方法中添加相关的注解就足够了。

    例如:

    @Delete
    void deleteWord(Word word);
    
    @Update
    void update(Word... word);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 对于查询或更复杂的数据库交互,例如删除所有单词,请使用@query注释并提供操作的 SQL。

    例如:

    @Query("SELECT * from word_table ORDER BY word ASC")
    LiveData> getAllWords();
    
    @Query("DELETE FROM word_table")
    void deleteAll();
    
    • 1
    • 2
    • 3
    • 4
    • 5

    ItemTouchHelper

    • 要使用户能够在 中滑动或移动项目RecyclerView,您可以使用ItemTouchHelper该类。
    • 实施onMove()onSwipe().
    • 要识别用户移动或滑动的项目,您可以为RecylerView. 该方法获取一个位置并返回相关项目。调用里面的方法onMove()or onSwipe()
  • 相关阅读:
    RS485接线方式
    【Web】First
    [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(一)SQL注入相关面试题
    linux:2.3.4 查找/搜索命令(find+grep)+压缩/解压缩命令(gzipbzip2+tar+mv+mkdir)
    使用docker-compose安装gitlab-ce 以及升级gitlab
    AI 人工智能学习之聚类分析及算法(1)
    Dash应用页面整体布局技巧
    做亚马逊测评自养号 环境很重要 决定了你能做多长久
    美图赶上了AIGC浪潮?
    基于phpstudy的靶场搭建和github加速
  • 原文地址:https://blog.csdn.net/weixin_44226181/article/details/126435335