Java在循环子句上获取类字段并检查值

时间:2016-07-23 09:41:44

标签: java android realm

我在Relam对象的数据库模型中的下面的类

public class ModelMarketBanners extends RealmObject {
    @PrimaryKey
    private String id;
    private String marketId;
    private String imageFileName;
    private String title;
}

据我所知,我可以通过类getter获取模型字段数据,例如getId(),但我想在loop子句中获取字段名而不是类getter方法,例如使用for来显示所有类字段,例如idmarketId,我该怎么做?

我想获取所有文件数据,如果哪一个不是空的附加布局与该数据,而不是编程多行来检查和附加

例如:

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());

2 个答案:

答案 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 ....