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();
}
});
}
}
他は前に同じ。