Androidのメーカー之ROM【2】、LiveData + ViewModelに+ AsyncTask +リポジトリ

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();
            }
        });

  

 

おすすめ

転載: www.cnblogs.com/gfwei/p/11808966.html