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

MainActivity.java

package com.example.roomsample;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import org.w3c.dom.Text;

import java.io.Serializable;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Button registerBtn= findViewById(R.id.registerBtn);
Button displayBtn = findViewById(R.id.displayBtn);

TextView index = findViewById(R.id.index);
index.setVisibility(View.INVISIBLE);
AppDatabase db = AppDatabaseSingleton.getInstance(getApplicationContext());
DataStoreAsyncTask dsat = new DataStoreAsyncTask(db,index);

registerBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dsat.execute();
}
});

displayBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
intent.putExtra("DataStorage",dsat.sb.toString());
startActivity(intent);
}
});
}

public class DataStoreAsyncTask extends AsyncTask<Void,Void,Integer> {
private AppDatabase db;
private TextView textView;
private Context context;
StringBuilder sb;

public DataStoreAsyncTask(AppDatabase db,TextView textView) {
this.db= db;
this.textView =textView;
}

@Override
protected Integer doInBackground(Void... voids) {
UserDao userDao = db.userDao();
EditText editTime = findViewById(R.id.editTime);
EditText editTask = findViewById(R.id.editTask);

userDao.insert(new User(editTime.getText().toString(),editTask.getText().toString()));
sb = new StringBuilder();
List<User> atList = userDao.getAll();
for(User user: atList){
sb.append(user.getTime()).append(" ").append(user.getTask()).append("\n");
}
return 0;
}

protected void onPostExecute(Integer code){
textView.setText(sb.toString());
}
}
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:gravity="center_horizontal"
android:orientation="vertical">

<LinearLayout
android:layout_height="wrap_content"
android:layout_width="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="時刻:"/>

<EditText
android:id="@+id/editTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2020/06/17 10:00:00のように記載"/>
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginTop="20sp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="やること:"/>

<EditText
android:id="@+id/editTask"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
<Button
android:id="@+id/registerBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="登録"/>
<Button
android:id="@+id/displayBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="一覧を表示"/>
<TextView
android:id="@+id/index"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>

SecondActivity.java

package com.example.roomsample;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

import java.util.List;

public class SecondActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
TextView showData = findViewById(R.id.showData);

Intent intent = getIntent();
String dataStorage = intent.getStringExtra("DataStorage");
showData.setText(dataStorage);

}
}

activity_second.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SecondActivity"
android:gravity="center_horizontal"
android:orientation="vertical">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="データ一覧表示"
android:layout_marginTop="60sp"/>
<TextView
android:id="@+id/showData"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="40sp"/>

</LinearLayout>

User.java、UserDaoインターフェース、AppDatabase.java、AppDatabaseSingleton.java

は以前と同じです。

データ一式をList<User>で返す方法がわからない。

String型で、それぞれ区切りにカンマ(,)を入れて、別のActivityに送って、split( )を使って分けて、配列をを作ることはできるかもしれない。