AS Room編②解説part2~Roomを使って、登録したデータを別のActivityに表示する~

Messageクラスのobj変数は、例えば、List<String>のようなコレクションでも別のスレッドからメインスレッドへ送ることができるようです。

 

MainActivity.java

package com.example.roommessagelist;
import androidx.appcompat.app.AppCompatActivity;
import androidx.room.Dao;

import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

TextView showData = findViewById(R.id.showData);


//Handler
Handler handler = new Handler(){
public void handleMessage(Message msg){
ArrayList<String> filteredList =(ArrayList<String>)msg.obj;
StringBuilder sb = new StringBuilder();
for(String str:filteredList){
sb.append(str).append("\n");
}
showData.setText(sb.toString());
}
};



Button registerBtn = findViewById(R.id.registerBtn);
AppDatabase db = AppDatabaseSingleton.getInstance(getApplicationContext());
registerBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new Thread(new Runnable(){

@Override
public void run() {
// 本質的な処理
UserDao userDao = db.userDao();
EditText editName = findViewById(R.id.editName);
userDao.insert(new User(editName.getText().toString()));
StringBuilder sb = new StringBuilder();
List<User> atList = userDao.getAll();
ArrayList<String> filteredList = new ArrayList<>();
for(User user:atList){
filteredList.add(user.getName());
}

//メッセージオブジェクトを利用
Message msg = new Message();
msg.what = 456;
msg.arg1 = 1234;
msg.arg2 = 5678;
msg.obj = filteredList;

handler.sendMessage(msg);
}
}).start();

}
});
}

}

他は前に同じ。