我正在完成一个课堂练习,使用Room Database保存数据,并在ListView中显示信息。
这个应用程序是关于一名球员的。该球员有4个字段(ID、姓名、位置、进球数)。
第一个保存的球员的ID应该是#1,第二个球员的ID应该是#2,以此类推。
用户必须通过EditText字段输入球员的姓名。
然后有三个单选按钮,用户必须选择其中一个以选择他们的位置(守门员、后卫、前锋)。最后,用户必须通过使用EditText字段输入此球员已打入的进球数。
最后,用户必须通过使用EditText字段输入此球员已打入的进球数。
当用户点击“保存”按钮时,之前选择的所有字段都将被清除,并且会显示一个快速的弹窗消息,显示球员的ID号码。
为了查看所有保存的数据,用户必须点击“查看全部”按钮,这将带他们到第二个活动并在下一个活动中显示球员的姓名、位置和进球数。
我不太熟悉Room,所以每当我按“保存”按钮时,我的应用程序就会崩溃。任何帮助都将不胜感激,谢谢!
MainActivity.Java
activity_main.xml: https://www.codepile.net/pile/d5rq8mx2 主活动界面的xml文件,可通过上述链接查看。
activity_second.xml: https://www.codepile.net/pile/2vbYzXq3 第二个活动界面的xml文件,可通过上述链接查看。
这个应用程序是关于一名球员的。该球员有4个字段(ID、姓名、位置、进球数)。
第一个保存的球员的ID应该是#1,第二个球员的ID应该是#2,以此类推。
用户必须通过EditText字段输入球员的姓名。
然后有三个单选按钮,用户必须选择其中一个以选择他们的位置(守门员、后卫、前锋)。最后,用户必须通过使用EditText字段输入此球员已打入的进球数。
最后,用户必须通过使用EditText字段输入此球员已打入的进球数。
当用户点击“保存”按钮时,之前选择的所有字段都将被清除,并且会显示一个快速的弹窗消息,显示球员的ID号码。
为了查看所有保存的数据,用户必须点击“查看全部”按钮,这将带他们到第二个活动并在下一个活动中显示球员的姓名、位置和进球数。
我不太熟悉Room,所以每当我按“保存”按钮时,我的应用程序就会崩溃。任何帮助都将不胜感激,谢谢!
MainActivity.Java
public class MainActivity extends AppCompatActivity {
private EditText playerEdt, goalsEdt;
private int id = 0;
private RadioGroup groupRad;
private RadioButton radioButton;
private MyDatabase myDb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
playerEdt = findViewById(R.id.edtPlayer);
goalsEdt = findViewById(R.id.edtGoals);
myDb = MyDatabase.getInstance(MainActivity.this);
}
public void saveData(View view) {
id++;
String name = playerEdt.getText().toString();
groupRad = findViewById(R.id.radGroup);
int selectedId = groupRad.getCheckedRadioButtonId();
radioButton = findViewById(selectedId);
String position = radioButton.getText().toString();
String goalsString = goalsEdt.getText().toString();
int goals = Integer.valueOf(goalsString);
Player player = new Player(id, name, position, goals);
myDb.playerDao().insert(player);
playerEdt.setText("");
goalsEdt.setText("");
groupRad.clearCheck();
}
public void viewData(View view) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
}
}
SecondActivity.Java
public class SecondActivity extends AppCompatActivity {
ListView listView;
MyDatabase database;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
listView = findViewById(R.id.listView);
database = MyDatabase.getInstance(SecondActivity.this);
List<Player> players = database.playerDao().getAll();
ArrayAdapter adapter = new ArrayAdapter(SecondActivity.this, android.R.layout.simple_list_item_1, players);
listView.setAdapter(adapter);
}
}
Player.Java
@Entity
public class Player {
@PrimaryKey
private int id;
@ColumnInfo(name = "player_name")
private String name;
@ColumnInfo(name = "player_position")
private String position;
@ColumnInfo(name = "player_goals")
private int goals;
public Player(int id, String name, String position, int goals) {
this.id = id;
this.name = name;
this.position = position;
this.goals = goals;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
public int getGoals() {
return goals;
}
public void setGoals(int goals) {
this.goals = goals;
}
}
PlayerDao.java
@Dao
public abstract class PlayerDao {
@Insert
public abstract void insert (Player player);
@Delete
public abstract void delete (Player player);
@Update
public abstract void update (Player player);
@Query("select * from Player")
public abstract List<Player> getAll();
}
MyDatabase.Java
@Database(entities = Player.class, version = 1)
public abstract class MyDatabase extends RoomDatabase {
public abstract PlayerDao playerDao();
private static MyDatabase instance;
public static MyDatabase getInstance(Context context){
if( instance == null){
instance = Room.databaseBuilder(context, MyDatabase.class, "PlayerDb")
.allowMainThreadQueries()
.build();
}
return instance;
}
}
activity_main.xml: https://www.codepile.net/pile/d5rq8mx2 主活动界面的xml文件,可通过上述链接查看。
activity_second.xml: https://www.codepile.net/pile/2vbYzXq3 第二个活动界面的xml文件,可通过上述链接查看。