#android #database #android-room #emoji
#Android #База данных #android-комната #смайлики
Вопрос:
Я создаю приложение для отслеживания настроения для Android, используя базу данных Room с языком Java. Я планирую использовать встроенные в Android смайлики, чтобы пользователь мог вводить нужные смайлики, но я не уверен, как сохранить их в базе данных Room, а затем извлечь данные для отображения в другом фрагменте?
Буду очень признателен, если кто-нибудь даст некоторые рекомендации по этому вопросу или прикрепит соответствующие обучающие видео ссылки на это, потому что я все еще новичок в разработке мобильных приложений
Ответ №1:
Что касается Room, вам нужно только сохранить некоторые способы узнать, что такое смайлик, возможно, Юникод для смайликов.
например, значение grinning face равно 0x1F600, возможно, описательное. Затем вы можете установить TextView, например, с включением смайликов.
Возможно, вы могли бы создать таблицу, содержащую только смайлики, а затем сохранить ссылку (иметь отношение) к этой таблице.
Ниже приведен очень простой пример рабочей комнаты.
Результатом будет список смайликов, отображаемых в ListView.
В этом примере есть таблица, в которой хранятся коды смайликов вместе с описанием смайликов. Таблица была названа emoji, а класс Entity является EmojiTable согласно :-
@Entity(tableName = "emoji")
class EmojiTable {
@PrimaryKey(autoGenerate = false)
@ColumnInfo(name = "_id")
Long id;
@ColumnInfo(name = "emoji_code", index = true)
String emoji_code;
@ColumnInfo(name = "emojidesc")
String emoji_desc;
// Default constructor
EmojiTable(){}
// Alternative Constructor
@Ignore
EmojiTable(String emoji_code,String emoji_desc) {
this.emoji_code = emoji_code;
this.emoji_desc = emoji_desc;
}
// Override default toString method to return the emoji followed by it's decsription
@Ignore
public String toString() {
return new String(Character.toChars(Integer.decode(emoji_code))) " " emoji_desc;
}
}
- 3 столбца
- столбец _id для уникального идентификатора
- столбец emoji_code для шестнадцатеричного кода смайлика
- столбец emoji_desc для описания смайликов
- Обратите внимание, что метод toString был переопределен, чтобы вернуть строку, содержащую смайлик, за которым следует его описание. Это используется для установки TextView в ListView.
- в противном случае используется метод toString по умолчанию, который отображает объект.
Чтобы сопровождать таблицу смайликов, используйте DAO AllDao для действий с базой данных :-
@Dao
interface AllDao {
// Insertion of a row
@Insert(entity = EmojiTable.class, onConflict = OnConflictStrategy.IGNORE)
long insertEmoji(EmojiTable e);
//Deletion of ALL rows
@Query("DELETE FROM emoji")
int deleteAll();
// Get ALL rows
@Query("SELECT * FROM emoji")
List<EmojiTable> getAllEmojis();
// Get a row by the id passed to the method
@Query("SELECT * FROM emoji WHERE emoji._id = :id")
EmojiTable getEmojiById(Long id);
// Get the number of rows (used to detect changes)
@Query("SELECT count(*) FROM emoji")
Long getRowsInEmojiTable();
}
Абстрактный класс @Database MyDatabase
@Database(entities = {EmojiTable.class}, version = 1)
abstract class MyDatabase extends RoomDatabase {
abstract AllDao getAllDao();
}
Класс, а именно EmojiList, который определяет эмодзи / основной список эмодзи.
- использование этих изменений (если изменяется количество смайликов) позволяет изменять смайлики, хранящиеся в базе данных (в случае развертывания новой версии приложения).
.
class EmojiList {
public static final EmojiTable[] EMOJIS = {
new EmojiTable("0x1F600","Grinning Face"),
new EmojiTable("0x1F602","Unknown"),
new EmojiTable("0x1F911","Money-Mouth Face")
};
}
- определены 3 смайлика
Макет, который включает в себя ListView для отображения списка смайликов :-
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
/>
<ListView
android:id="@ id/emojilist"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/design_default_color_secondary"/>
</LinearLayout>
- Здесь нет ничего особенного, кроме цвета фона, чтобы увидеть, где находится список.
Наконец, собрав все это вместе, Activity MainActivity
public class MainActivity extends AppCompatActivity {
MyDatabase db;
AllDao dao;
List<EmojiTable> emojiList_list;
ListView emojiList_listview;
ArrayAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Instantiate the MyDatabase object with a built Room Database
db = Room.databaseBuilder(this,MyDatabase.class,"mydb")
.allowMainThreadQueries()
.build();
// Instantiate the dao interface
dao = db.getAllDao();
// Check to see if the emoji's stored equals the master list
// If not rebuild the emjoi table
if (dao.getRowsInEmojiTable() != EmojiList.EMOJIS.length) {
dao.deleteAll(); // Delete all existing rows
for(EmojiTable e: EmojiList.EMOJIS) {
dao.insertEmoji(e);
}
}
// Very simple list of all emojis
emojiList_list = dao.getAllEmojis(); //
emojiList_listview = this.findViewById(R.id.emojilist);
adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1,emojiList_list);
emojiList_listview.setAdapter(adapter);
}
}
Результат
При запуске приложение выглядит так :-
База данных (через инспектор базы данных) :-