AS Room編➂ 改変後(AsyncTaskを使わず、Runnable、Handler、Messageを使用する)

MainActivity.java

package com.example.singleroomrunnable;

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){
String[] recievedArray =(String[])msg.obj;
StringBuilder sb = new StringBuilder();
for(int i=0;i<recievedArray.length;i++){
sb.append(recievedArray[i]).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());
}
String[] userNameArray = filteredList.toArray(new String[filteredList.size()]);

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

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

}
});
}

}

 

他は前に同じ。