我在Relam对象的数据库模型中的下面的类
public class ModelMarketBanners extends RealmObject {
@PrimaryKey
private String id;
private String marketId;
private String imageFileName;
private String title;
}
据我所知,我可以通过类getter获取模型字段数据,例如getId()
,但我想在loop子句中获取字段名而不是类getter方法,例如使用for
来显示所有类字段,例如id
或marketId
,我该怎么做?
我想获取所有文件数据,如果哪一个不是空的附加布局与该数据,而不是编程多行来检查和附加
例如:
for(int i=0; i> model.field_count; i++){
if (model.field.lenght() > 0) Log.v("data is: ", model.field);
}
而不是
SampleModel model = realm.where(SampleModel.class).findfirst();
if(model.getId().lenght() > 0)
Log.v("data is",model.getId());
if(model.getmarketId().lenght() > 0)
Log.v("data is",model.getmarketId());
if(model.getImageFileName().lenght() > 0)
Log.v("data is",model.getImageFileName());
答案 0 :(得分:3)
有一种方法,使用反射:
for (Field field : ModelMarketBanners.class.getDeclaredFields()) {
for (Method method : ModelMarketBanners.class.getMethods()) {
if ((method.getName().startsWith("get")) && (method.getName().length() == (field.getName().length() + 3))) {
if (method.getName().toLowerCase().endsWith(field.getName().toLowerCase())) {
try {
Object value = method.invoke(model);
if (!TextUtils.isEmpty(String.valueOf(value)) {
Log.v("data is: ", String.valueOf(value));
}
} catch (IllegalAccessException | InvocationTargetException e) {
}
}
}
}
}
答案 1 :(得分:0)
我看到了另一篇文章,用反射来看看这个...
public class SomeClass {
private String returnString;
private String id;
private String marketId;
private String imageFileName;
private String title;
// test
public static void main(String[] args) {
List<String> myFields = new ArrayList<>();
Field[] allFields = SomeClass.class.getDeclaredFields();
for (Field field : allFields) {
myFields.add(field.getName());
}
System.out.println(myFields);
}
}
输出将是类
的字段[returnString,id,marketId,imageFileName,title]
如果您需要字符串变量中的数据,请查看此question/ my answer ....