ORMLite RunTimeException - 如何从之前的 Activity 传递对象类型
ORMLite RunTimeException - how pass Object type from previous Activity
我有几个 class 几个 table。每个 class 都有相同的字段。在第一个 activity 我选择我想使用的 table,然后转到另一个 activity。我在那里创建 RuntimeExceptionDao<Biceps, String> bicepsDao = dao.getBicepsRunTimeDao();
二头肌是一个 table 的名称。然后我为人体的每个部分创建这个 dao,然后我执行相同的过程,取决于 table,它看起来像这样
switch (partia) {
case "biceps": {
RuntimeExceptionDao<Biceps, String> bicepsDao = dao.getBicepsRunTimeDao();
List<Biceps> list = bicepsDao.queryForAll();
final ArrayAdapter<Biceps> arrayAdapter = new ArrayAdapter<Biceps>(this, android.R.layout.simple_list_item_1, list);
listView.setAdapter(arrayAdapter);
arrayAdapter.notifyDataSetChanged();
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Biceps item = arrayAdapter.getItem(position);
String idCwiczenia = item.getId();
Intent myIntent = new Intent(Cwiczenia.this, DodajSerie.class);
myIntent.putExtra("id", idCwiczenia);
Cwiczenia.this.startActivity(myIntent);
}
});
}
break;
case "triceps": {
RuntimeExceptionDao<Triceps, String> tricepsDao = dao.getTricepsRunTimeDao();
List<Triceps> list = tricepsDao.queryForAll();
final ArrayAdapter<Triceps> arrayAdapter = new ArrayAdapter<Triceps>(this, android.R.layout.simple_list_item_1, list);
listView.setAdapter(arrayAdapter);
arrayAdapter.notifyDataSetChanged();
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Triceps item = arrayAdapter.getItem(position);
String idCwiczenia = item.getId();
Intent myIntent = new Intent(Cwiczenia.this, DodajSerie.class);
myIntent.putExtra("id", idCwiczenia);
Cwiczenia.this.startActivity(myIntent);
}
});
}
break;
所以,代码看起来很像,我认为它反对 "Don't repeat yourself"。
我的问题:是否可以创建 RuntimeExceptionDao 并传递之前 Activity 的对象类型?建一个List,建一个ArrayList也是应该的
使用 String getId()
函数创建接口 Exercises
并在您的所有练习中实现它 类(Biceps
、Triceps
等)。
然后将 dao.getBicepsRunTimeDao()
和 dao.getTricepsRunTimeDao()
替换为一些更通用的函数:
public <T extends Exercises> RuntimeExceptionDao<T, String> getDao(Class<T> classt) {
return RuntimeExceptionDao.createDao(connectionSource, classt);
}
然后你可以创建
private <T extends Exercises> void initializeList(Class<T> classt) {
RuntimeExceptionDao<T, String> dao = dao.getDao(classt);
List<T> list = dao.queryForAll();
final ArrayAdapter<T> arrayAdapter = new ArrayAdapter<T>(this, android.R.layout.simple_list_item_1, list);
listView.setAdapter(arrayAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
T item = arrayAdapter.getItem(position);
String idCwiczenia = item.getId();
Intent myIntent = new Intent(Cwiczenia.this, DodajSerie.class);
myIntent.putExtra("id", idCwiczenia);
Cwiczenia.this.startActivity(myIntent);
}
});
}
你可以这样使用这个函数:
switch (partia) {
case "biceps":
initializeList(Biceps.class);
break;
case "triceps":
initializeList(Triceps.class);
break;
}
您也可以从第一个 activity Class<T>
对象传递(它是可序列化的,因此您可以将它放在 Bundle
中)以避免使用 switch-case。
我有几个 class 几个 table。每个 class 都有相同的字段。在第一个 activity 我选择我想使用的 table,然后转到另一个 activity。我在那里创建 RuntimeExceptionDao<Biceps, String> bicepsDao = dao.getBicepsRunTimeDao();
二头肌是一个 table 的名称。然后我为人体的每个部分创建这个 dao,然后我执行相同的过程,取决于 table,它看起来像这样
switch (partia) {
case "biceps": {
RuntimeExceptionDao<Biceps, String> bicepsDao = dao.getBicepsRunTimeDao();
List<Biceps> list = bicepsDao.queryForAll();
final ArrayAdapter<Biceps> arrayAdapter = new ArrayAdapter<Biceps>(this, android.R.layout.simple_list_item_1, list);
listView.setAdapter(arrayAdapter);
arrayAdapter.notifyDataSetChanged();
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Biceps item = arrayAdapter.getItem(position);
String idCwiczenia = item.getId();
Intent myIntent = new Intent(Cwiczenia.this, DodajSerie.class);
myIntent.putExtra("id", idCwiczenia);
Cwiczenia.this.startActivity(myIntent);
}
});
}
break;
case "triceps": {
RuntimeExceptionDao<Triceps, String> tricepsDao = dao.getTricepsRunTimeDao();
List<Triceps> list = tricepsDao.queryForAll();
final ArrayAdapter<Triceps> arrayAdapter = new ArrayAdapter<Triceps>(this, android.R.layout.simple_list_item_1, list);
listView.setAdapter(arrayAdapter);
arrayAdapter.notifyDataSetChanged();
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Triceps item = arrayAdapter.getItem(position);
String idCwiczenia = item.getId();
Intent myIntent = new Intent(Cwiczenia.this, DodajSerie.class);
myIntent.putExtra("id", idCwiczenia);
Cwiczenia.this.startActivity(myIntent);
}
});
}
break;
所以,代码看起来很像,我认为它反对 "Don't repeat yourself"。
我的问题:是否可以创建 RuntimeExceptionDao 并传递之前 Activity 的对象类型?建一个List,建一个ArrayList也是应该的
使用 String getId()
函数创建接口 Exercises
并在您的所有练习中实现它 类(Biceps
、Triceps
等)。
然后将 dao.getBicepsRunTimeDao()
和 dao.getTricepsRunTimeDao()
替换为一些更通用的函数:
public <T extends Exercises> RuntimeExceptionDao<T, String> getDao(Class<T> classt) {
return RuntimeExceptionDao.createDao(connectionSource, classt);
}
然后你可以创建
private <T extends Exercises> void initializeList(Class<T> classt) {
RuntimeExceptionDao<T, String> dao = dao.getDao(classt);
List<T> list = dao.queryForAll();
final ArrayAdapter<T> arrayAdapter = new ArrayAdapter<T>(this, android.R.layout.simple_list_item_1, list);
listView.setAdapter(arrayAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
T item = arrayAdapter.getItem(position);
String idCwiczenia = item.getId();
Intent myIntent = new Intent(Cwiczenia.this, DodajSerie.class);
myIntent.putExtra("id", idCwiczenia);
Cwiczenia.this.startActivity(myIntent);
}
});
}
你可以这样使用这个函数:
switch (partia) {
case "biceps":
initializeList(Biceps.class);
break;
case "triceps":
initializeList(Triceps.class);
break;
}
您也可以从第一个 activity Class<T>
对象传递(它是可序列化的,因此您可以将它放在 Bundle
中)以避免使用 switch-case。