2016-11-29 3 views
0

私はレルムのjava、(反射)

Object o = ...; // The object you want to inspect 
Class<?> c = o.getClass(); 

Field f = c.getField("myColor"); 
f.setAccessible(true); 

String valueOfMyColor = (String) f.get(o); 

のような反射を経て、文字列でモデルのプロパティにアクセスしたかったが、私はまだプロパティが存在しないというエラーを取得しました。それからRealmModelオブジェクトがRealmProxyクラスでラップされていることがわかりました。

文字列でRealmModelプロパティにアクセスするにはどうすればいいですか?反射や別の方法を介して。 、あなたが例えばrealmGet$fieldName()方法、またはgetFieldName()方法

のようなあなたのゲッターを呼び出すためにどちらかの必要

答えて

2

は、私はこの

public static String getFieldThroughGetterAsStringTransform(Object target, String property) { 
    try { 
     Method method = target.getClass().getMethod("get" + StringUtils.capitalize(property)); 
     Object getResult = method.invoke(target); 
     return getResult != null ? getResult.toString() : null; 
    } catch(Exception e) { 
     Log.e(TAG, "Failed to map property [" + property + "] on object [" + target + "]"); 
     throw new RuntimeException(e); 
    } 
} 

そして

String fieldValue = FieldTransformer.getFieldThroughGetterAsStringTransform(managedObject, fieldName); 

をしました。しかし、あなたはother ways of calling getterで見ることができますApache Commons BeanUtilsのように:

Object value = PropertyUtils.getProperty(person, "name"); 
+0

少し厄介しかしTHX通常のオブジェクトとしてそれを反映して、ところであなたはそれがコード内で、元RealmObjectの性質上ではなく、反射を介したアクセスが動作することも可能である方法を知っていますか?それがコードで動作する場合は、反射を介しても動作する必要がありますか? – luky

+1

フィールドがヌルなので、getterはレルムから直接読み取るプロキシのネイティブメソッドを呼び出します – EpicPandaForce

+0

ahaありがとう – luky

0

私は、このオブジェクトcopyFromRealmに好むと