2016-07-23 11 views
1

diese unter Klasse in meiner Datenbank Modell auf Relam ObjektJava bekommen Klassenfelder auf Loop-Klausel und überprüfen Wert

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

soweit ich weiß, ich kann Modellfelder Daten nach Klasse Getter wie getId() zu bekommen, aber ich möchte anstelle von Klassen-Getter-Methoden auf Loop-Klausel archivierten Namen erhalten, zum Beispiel mit for, um alle Klassenfelder wie id oder marketId anzuzeigen, wie kann ich das tun?

Ich möchte all fileds Daten erhalten und wenn ja welche ist das Layout nicht leer befestigen mit diesen Daten, anstatt mit mehreren Leitungen von programing zu überprüfen und zu befestigen, dass

zum Beispiel:

for(int i=0; i> model.field_count; i++){ 
    if (model.field.lenght() > 0) Log.v("data is: ", model.field); 
} 

statt von

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

Antwort

3

Es gibt einen Weg, mit Reflexion:

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) { 
        } 

       } 
      } 
     } 
    } 
+0

funktioniert nicht richtig und konnte nicht Klassenziel bekommen ds –

+0

@mahdipishguy Ich habe es überprüft und es funktioniert. Wahrscheinlich sind die Werte der Felder in Ihrem Objekt leer. – Divers

+0

nach Debug-Loop-Klausel bekomme ich keine Klasse fileds –

0

ich den anderen Posten sah, an dieser mit Reflexion einen Blick ...

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

die Ausgabe werden die Felder der Klasse

[returnString, id, marketId, imageFileName, title]

EDit sein:

wenn Sie brauchen die Daten in den String-Variablen bitte einen Blick auf diese question/ my answer ....

+0

Ich denke, er fragt nach Daten, nicht Felder Namen. – Divers