Android studio kotlin todo app

Русские Блоги

Android Room By Kotlin

Введение в демо

Эта демонстрация представляет собой простое приложение, демонстрирующее использование синтаксиса Room в Kotlin.

Введение в комнату

Библиотека сохраняемости Room предоставляет уровень абстракции на основе SQLite, позволяя пользователям в полной мере использовать мощные функции SQLite, пользуясь более надежным механизмом доступа к базе данных.

Эта библиотека помогает вам создать локальную базу данных на устройстве, на котором запущено приложение.

1. Создайте пустой проект.

2. Обновите файл Gradle.

Библиотеку компонентов необходимо добавить в файл Gradle
в вашем build.gradle Внесите следующие изменения в (Модуль: приложение):
Примените его, добавив плагин Kotlin для обработки аннотаций kapt к другим плагинам, определенным в верхней части файла (Module: app).
bulid.gradle

В коде dependencies Добавьте следующий код в конец блока.

ПозжеПроект build.gradle (Project)

Здесь вы также можете перейти на официальный сайт, чтобы найти номер последней версииссылка на сайт

3. Создайте объект

Room позволяет создавать таблицы через Entity. Начнем сейчас.

Проанализируйте значение аннотации @ в следующем коде

  • @Entity(tableName = «todo_database»)
    каждый @Entity Класс представляет собой таблицу SQLite. Аннотируйте свой класс, чтобы показать, что это класс сущности. Если вы хотите, чтобы имя таблицы отличалось от имени класса, вы можете указать имя таблицы. Эта таблица называется «todo_database»
  • @PrimaryKey
    Каждой сущности нужен первичный ключ. Используйте здесь autoGenerate = true Для автоматического создания
  • @ColumnInfo(name = «todo_title»)
    Если вы хотите, чтобы имя столбца в таблице отличалось от имени переменной-члена, укажите это имя. Это назовет столбец «todo_title».

4. Создайте Дао

Что такое Дао?

В DAO (объект доступа к данным) укажите запросы SQL и свяжите их с вызовами методов. Компилятор проверяет SQL и генерирует запросы @Insert для общих запросов (например) из удобных комментариев. Room использует DAO для создания чистого API для вашего кода.

DAO должен быть интерфейсом или абстрактным классом.

По умолчанию все запросы должны выполняться в отдельном потоке.

В Room есть поддержка сопрограмм, что позволяет аннотировать ваши запросы с помощью модификатора приостановки, а затем вызывать их из сопрограммы или другой приостановленной функции.

Написать Дао

Давайте напишем DAO, который предоставляет следующий запрос:

  1. Расположите все заголовки в алфавитном порядке
  2. Вставить Todo
  3. Удалить все Todo
  1. TodoDao Интерфейс; Дао должен быть интерфейсом или абстрактным классом.
  2. В @Dao В аннотации указано, что это класс комнаты Дао.
  3. suspend fun insert(todo: Todo) Объявите функцию паузы для вставки Todo.
  4. Аннотация @Insert — это специальная аннотация метода DAO, вам не нужно предоставлять какой-либо SQL! (Существуют также аннотации @Delete и @Update для удаления и обновления строк, но они не используются в этом приложении.)
  5. onConflict = OnConflictStrategy.IGNORE Если Todo, выбранный в политике конфликтов, в точности совпадает с существующим Todo в списке, слово будет проигнорировано.
  6. suspend fun deleteAll() Объявите функцию паузы для удаления всех Todos.
  • на @Query Использование слишком много и разное, пожалуйста, проверьте информацию самостоятельно

5. Класс LiveData

При изменении данных обычно требуются некоторые меры, например отображение обновленных данных в пользовательском интерфейсе. Это означает, что вы должны наблюдать за данными, чтобы вы могли реагировать на их изменение.

В зависимости от того, как хранятся данные, это может быть сложно. Наблюдение за изменениями данных между несколькими компонентами приложения может создать четкий и строгий путь зависимости между компонентами. Это очень затрудняет тестирование и отладку.

LiveData, класс библиотеки жизненного цикла для наблюдения за данными, может решить эту проблему. LiveData использует возвращаемое значение типа в описании метода, а затем Room генерирует все необходимые коды для обновления базы данных LiveData.
отражен в приведенном выше блоке кода следующим образом

Читайте также:  Drawable android как добавить картинку

Позже в этой демонстрации изменения данных будут отслеживаться через Observer.

7, добавьте RoomDatabase

Что такое RoomDatabase?

  • Комната — это уровень базы данных поверх базы данных SQLite.
  • Room отвечает за выполнение общих задач, которые ранее выполнялись NET.
  • Room использует DAO для отправки запросов к своей базе данных.
  • По умолчанию, чтобы избежать снижения производительности пользовательского интерфейса, Room не позволяет выполнять запросы в основном потоке. Когда запрос Room возвращает LiveData, запрос будет автоматически выполняться асинхронно в фоновом потоке.
  • Room обеспечивает проверку операторов SQLite во время компиляции.

Написать RomDatabase

Класс RoomDatabase должен быть абстрактным и может расширять RoomDatabase. Обычно для всего приложения требуется только один экземпляр базы данных Room.

Давайте сделаем это сейчас. Создайте файл класса Kotlin с именем WordRoomDatabase и добавьте следующий код:

Взглянем на код:

  • Room Класс базы данных должен быть abstract И расширить RoomDatabase
  • Вы используете класс аннотации в качестве базы данных Room, @Database И используйте параметр комментария, чтобы объявить сущность, принадлежащую базе данных, и установить номер версии. Каждой сущности соответствует таблица, которая будет создана в базе данных. Миграция базы данных выходит за рамки этой лаборатории кода, поэтому exportSchema Установить здесь как false Чтобы избежать генерации предупреждений. В реальном приложении вам следует рассмотреть возможность создания каталога для Room для экспорта архитектуры, чтобы текущую архитектуру можно было проверить в системе контроля версий.
  • Вы переходите за каждый @Dao Создайте абстрактный метод «получения», чтобы база данных предоставляла свой DAO.
  • Мы определили singleton , TodoRoomDatabase Чтобы предотвратить одновременное открытие нескольких экземпляров базы данных.
  • getDatabase Вернуться к синглтону. Он будет использовать построитель базы данных Room при первом доступе к базе данных. RoomDatabase Создайте объект в контексте приложения класса TodoRoomDatabase И назовите его для создания базы данных «todo_database».

8. Создать репозиторий

Что такое репозиторий?

Класс репозитория абстрагирует доступ к нескольким источникам данных. Репозиторий не является частью библиотеки архитектурных компонентов, но является рекомендуемым разделением кода и передовыми методами архитектуры. Класс Repository предоставляет чистый API для доступа к данным остальной части приложения.

Написать репозиторий

Создайте файл класса Kotlin с именем TodoRepository И вставьте в него следующий код:

  1. DAO передается конструктору репозитория, а не всей базе данных. Это потому, что ему нужен только доступ к DAO, потому что DAO содержит все методы чтения / записи базы данных. Нет необходимости предоставлять всю базу данных в репозиторий.
  2. Todo Список является государственной собственностью. по LiveData Из Room Получите список слов для инициализации; причина, по которой мы можем это сделать, заключается в том, что мы определили getAlphabetizedTodoList возвращение LiveData Методы. Room Все запросы выполняются в отдельных потоках. Потом, когда LiveData Когда данные изменились, observed Наблюдатель будет уведомлен в основном потоке.
  3. В suspend Модификатор сообщает компилятору, что это нужно вызывать из сопрограммы или другой функции паузы.

9. Создайте ViewModel.

Что такое VIewModel?

ViewModel Роль заключается в предоставлении пользовательского интерфейса данных и сохранении изменений конфигурации. ViewModel Выступает в качестве коммуникационного центра между репозиторием и пользовательским интерфейсом. Вы также можете использовать ViewModel Делитесь данными между клипами. ViewModel Это часть библиотеки жизненного цикла.

Зачем использовать ViewModel

ViewModel Сохраняйте данные пользовательского интерфейса приложения с учетом жизненного цикла, чтобы сохранить изменения конфигурации. Данные пользовательского интерфейса приложения Activity Класс и Fragment Разделите классы, чтобы лучше следовать принципу единой ответственности: ваши действия и фрагменты отвечают за вывод данных на экран, а вы ViewModel Может отвечать за сохранение и обработку всех данных, требуемых пользовательским интерфейсом.
в ViewModel , LiveData Используется для переменных данных, которые будет использовать или отображать пользовательский интерфейс. Использование LiveData дает несколько преимуществ:

  1. Вы можете поставить наблюдателей на данные (вместо опроса на предмет изменений) и только
    Обновляйте пользовательский интерфейс только при фактическом изменении данных.
  2. Библиотека ресурсов и пользовательский интерфейс полностью разделены.
  3. Нет обращений к базе данных от ViewModel (Все это обрабатывается в репозитории), чтобы сделать код более тестируемым.

viewModelScope

В Котлине все сопрограммы запускаются внутри CoroutineScope . Осциллограф контролирует жизненный цикл сопрограммы через ее работу. При отмене операции области консолидации будут отменены все сопрограммы, запущенные в области консолидации.

Читайте также:  Android go edition смартфон

AndroidX lifecycle-viewmodel-ktx Библиотека добавлена viewModelScope Функция расширения класса ViewModel Чтобы вы могли использовать диапазон.

Реализовать ViewModel

Создайте для этого файл класса Kotlin и добавьте следующий код:

10. Наконец

Теперь нам нужно только вызвать метод вставки во ViewModel для вставки данных.

Конкретный код тестового интерфейса (RecyclerView и т. Д.) Показан по ссылке Github ниже.

Источник

Starting Android Development, Creating a Todo App

This article was updated in April 2016 to reflect changes in Android

Despite many articles related to Android on SitePoint, it’s been a while since we had a real ‘beginners’ tutorials. How better to fill that gap than with a staple of beginners tutorials, the ‘To Do’ App.

Needed Software

The ingredients every Android developer needs are:

  1. Android Studio, the official Android IDE (integrated development environment ). There may be still developers using the old ADT plugin for Eclipse, but that’s not maintained anymore. IntelliJ IDEA also supports Android development, so you may use that too.
  2. The Android SDK is the toolchain that manages everything required to build an Android app. It ships with Android Studio, but if you decide to use another IDE, you’ll have to download it.

It’s useful to have an Android device so you can test the app during development. If you can’t get your hands on an Android device, you can use the default emulator or Genymotion.

Note: Android’s biggest positive and flaw is it’s flexibility. I will use a particular IDE and SDK version, if your setup is different, then settings, code and screenshots may also vary.

You will need basic Java knowledge to follow this tutorial.

Getting Started

You can find the final code for this project on GitHub.

To create a new project, open Android Studio and click Start a new Android Studio project. Name the application “TodoList”, and add your company domain, which will be the application package. There can’t be two apps on the Play Store with the same package name or called “com.example”. I will name mine com.aziflaj.todolist.

Next, pick the platforms you want to develop for. I recommend setting the minimum SDK to support API level 15 and above. This means the application will support every smartphone with Android 4.0.3 or later.

On the next screen select Empty Activity and keep the name as MainActivity.

When Android Studio finishes generating the project you have the default “Hello, World” app.

Building the View

In MainActivity.java, you should have code something like the below:

On line 11, you set the view of this activity to R.layout.activity_main , which points to a file called activity_main.xml in the /res/layout directory of the project. A view controls layout of the Android interface and looks like this:

In the main view, you will add a ListView , which will contain a ToDo item in each row. To do this, replace the TextView element with the code below:

Now you will define a list item, which will represent a task in the interface.

Create a new layout file in the /res/layout folder called item_todo.xml. You will add two elements to this file, a TextView to show the task, and a “Done” Button to delete the task. Add this code to item_todo.xml, replacing anything that is already there.

The app needs a menu item to allow user to add more tasks. Add a main_menu.xml file in the /res/menu directory with the following code:

Add the code below to the MainActivity.java file, after the onCreate method:

Android developers frequently create a TAG constant with the name of the class for logging. Add this to the beginning of the MainActivity class:

The onCreateOptionsMenu() method inflates (renders) the menu in the main activity, and uses the onOptionsItemSelected() method to react to different user interactions with the menu item(s). If you run the application, it should look something like this:

If you click the add button, you will see something like this in the Android Studio log:

Читайте также:  Лост дир что за папка андроид

Next, you will add an AlertDialog to get the task from the user when the add item button is clicked. You already know where to add the code to react to the user, so replace the logging statement with this:

Now, clicking the plus button gives you this:

Enter some text and when you click the add button, the Android Studio log (“logcat”) will show something like this:

Storing and Retrieving Data

Android ships with an embedded SQLite database. The database needs a table before it can store any tasks, called “TaskTable”. Create a new db folder in the same location as MainActivity.java. Then create a new class called TaskContract with the file name TaskContract.java:

Add this code to TaskContract.java, changing the two package names appropriately.

The TaskContract class defines constants which used to access the data in the database. You also need a helper class called TaskDbHelper to open the database. Create this class in the db package and add the following code:

On lines 15 to 17 is this SQL query:

Now you need to adapt MainActivity to store data in the database. Add this code where you defined the DialogInterface.OnClickListener() for the AlertDialog ‘s add button, replacing:

This makes the whole onOptionsItemSelected() method look like:

Add a private instance of TaskDbHelper in the MainActivity class:

And initialize it in the onCreate() method:

If you run the application, you won’t see any differences in the UI, but you can check that the database is working by executing these commands on the terminal:

Note: If the two last commands don’t work for you, the SQLite3 utility is not included in most production devices, but you can install it by yourself.

Now you need to fetch all the data from the database and show it in the main view.

Replace your MainActivity.onCreate() method with this:

When you run the application, LogCat will show a list of all the tasks stored in the database. Next you will display data in the main view using an Adapter .

Get a reference to the ListView created in activity_main.xml file by adding an instance of the ListView :

Initialize the reference by adding this line of code to the onCreate() method, right after creating mHelper :

Move the code (with some changes) that was logging the tasks into a private method called updateUI() :

Add this private field to the MainActivity class:

This ArrayAdapter will help populate the ListView with the data.

If you don’t understand the updateUI() method, that’s OK. Instead of logging the tasks, add them into an ArrayList of Strings. Then check if mAdapter is created or not. If it isn’t, and mAdapter is null, create and set it as the adapter of the ListView :

If the adapter is already created (which implies that it’s assigned to the ListView ), clear it, re-populate it and notify the view that the data has changed. This means that the view will repaint on the screen with the new data.

To see the updated data, you need to call the updateUI() method every time the underlying data of the app changes. So, add it in two places:

  • In the onCreate() method, that initially shows all the data
  • After adding a new task using the AlertDialog

Deleting Tasks

After finishing a task, it should be deleted from the list.

Open the item_todo.xml layout and add this line to the Button tag:

When the button is clicked, it calls this method deleteTask() in the MainActivity class:

Now, clicking the Done button will delete the task from the list and the SQLite database.

Final Words

After writing all this code, you have a simple TodoList application, built with Java for Android. If this tutorial has got you interested in learning more, then your next step is looking through the rest of SitePoint’s Android content. Enjoy!

Источник

Оцените статью