ROMの変換[1]
1.観測とLiveData <リスト<ことば>> onChangedイベントの協力を使用して、TextViewには、更新機能(updateTextView)前に削除しました
データに変更があった場合に、それが自動的にコンテンツを更新する限り、LiveDataを導入して観察します。
MainActityクラスコード:
LiveData <リスト<ことば>> allWordsLive。 allWordsLive wordDao.getAllWordLive =(); //使用LiveData <>とonChangedイベントで観察し、データが自動的に更新され allWordsLive.observe(この、新しいオブザーバー<リスト<ことば>>(){ @オーバーライド 公共のボイドonChangedイベント(一覧<ことば>の言葉){ とき//データ変更時に自動的にこの関数を呼び出します //文字列のテキスト= ""; StringBuilderのテキスト=新しいStringBuilderの(); textView.setText(テキスト); //クリア最初のTextView 以下のために(; I <words.size(); INT iが0 = I ++){ ワードワード= words.get(I)。 text.append(word.getId()+ ":" + word.getWord()+ "=" + word.getChineseMeaning()+ "\ n"); textView.setText(テキスト); } } });
LiveData <リスト<言葉>>型へのクラスデータWordDaoの戻り値の型で
@query( "WORD ORDER BY ID DESC SELECT * FROM") LiveData <リスト<ことば>> getAllWordLive();
2.はじめAsyncTask、サブスレッドでの更新データ
wordDatabase = Room.databaseBuilder(これ、WordDatabase.class、 "word_database") //。AllowMainThreadQueries()// allowMainThreadQueries()力にメインスレッドを可能にします .build()。
コメントallowMainThreadQueries()
内部クラスMainActivityを追加
//内部クラス、クラスのAsyncTaskタイプは、内部クラスフォームがある場合、そのメモリ言って、静的な、そうでない場合はアラームでなければならないリーク 静的クラスInsertAsyncTaskはAsyncTask <ワード、ボイド、ボイド> {延び プライベートWordDao wordDao。 公共InsertAsyncTask(WordDao wordDao){ this.wordDao = wordDao。 } @オーバーライド 保護されたボイドdoInBackground(ワード...ワード){ //バックグラウンドスレッドで作業を行います wordDao.insertWords(ワード)。 ヌルを返します。 } /*@オーバーライド 保護されたボイドonPostExecute(ボイド避けます){ //タスクの完了時に呼び出されます、結果はメインスレッドにバックアップ super.onPostExecute(避けます)。 } @オーバーライド 保護された無効onProgressUpdate(ボイド...値){ //進捗状況の更新は、コールを発生した場合 super.onProgressUpdate(値)。 } @オーバーライド 保護されたボイドonPreExecute(){ //バックグラウンドタスクが呼び出す前に、 super.onPreExecute(); } * / } //内部クラス、クラスのAsyncTaskタイプは、内部クラスフォームがある場合、そのメモリ言って、静的な、そうでない場合はアラームでなければならないリーク 静的クラスUpdateAsyncTaskはAsyncTask <ワード、ボイド、ボイド> {延び プライベートWordDao wordDao。 公共UpdateAsyncTask(WordDao wordDao){ this.wordDao = wordDao。 } @オーバーライド 保護されたボイドdoInBackground(ワード...ワード){ //バックグラウンドスレッドで作業を行います wordDao.updateWords(ワード)。 ヌルを返します。 } } //内部クラス、クラスのAsyncTaskタイプは、内部クラスフォームがある場合、そのメモリ言って、静的な、そうでない場合はアラームでなければならないリーク 静的クラスDeleteAsyncTaskはAsyncTask <ワード、ボイド、ボイド> {延び プライベートWordDao wordDao。 公共DeleteAsyncTask(WordDao wordDao){ this.wordDao = wordDao。 } @オーバーライド 保護されたボイドdoInBackground(ワード...ワード){ //バックグラウンドスレッドで作業を行います wordDao.deleteWords(ワード)。 ヌルを返します。 } } //内部クラス、クラスのAsyncTaskタイプは、内部クラスフォームがある場合、そのメモリ言って、静的な、そうでない場合はアラームでなければならないリーク 静的クラスDeleteAllAsyncTaskはAsyncTask <空隙ボイド、ボイド>延び{ プライベートWordDao wordDao。 公共DeleteAllAsyncTask(WordDao wordDao){ this.wordDao = wordDao。 } @オーバーライド 保護されたボイドdoInBackground(ボイド...ボイド){ //バックグラウンドスレッドで作業を行います wordDao.deleteAllWords(); ヌルを返します。 } }
オリジナルの4つの動作方法、コメントメインスレッド操作、子スレッドによって変更された操作データ
buttonInsert.setOnClickListener(新しいView.OnClickListener(){ @オーバーライド 公共のボイドのonClick(ビューV){ Wordの単語1 =新しいWord( "こんにちは"、 "你好"); Wordのワード2 =新しいWord( "世界"、 "世界")。 //wordDao.insertWords(word1,word2); //これは、メインスレッドがデータに直接あります 新しいInsertAsyncTask(wordDao).execute(WORD1、WORD2); //子スレッドは親スレッドのデータに挿入され、 // updateView(); } }); buttonUpdate.setOnClickListener(新しいView.OnClickListener(){ @オーバーライド 公共のボイドのonClick(ビューV){ Wordのワード=新しいWord( "英語"、 "英语"); word.setId(46); // Updateは、主キーを更新することです //wordDao.updateWords(word); //メインスレッド操作 新しいUpdateAsyncTask(wordDao).execute(ワード); //サブスレッド操作 // updateView(); } }); //すべてのレコードを削除 buttonClear.setOnClickListener(新しいView.OnClickListener(){ @オーバーライド 公共のボイドのonClick(ビューV){ //wordDao.deleteAllWords(); //メインスレッド動作 新しいDeleteAllAsyncTask(wordDao).executeは(); //子スレッドで操作することが // updateView(); } }); buttonDelete.setOnClickListener(新しいView.OnClickListener(){ @オーバーライド 公共のボイドのonClick(ビューV){ Wordのワード=新しいWord( "英語"、 "英语"); word.setId(46); //主キーを更新するために使用され、削除 //wordDao.deleteWords(word);メインスレッド動作 新しいDeleteAsyncTask(wordDao).execute(ワード); //サブスレッド操作 // updateView(); } });