티스토리 뷰

Android/Java TIP

리플렉션 (reflection)

이주성 2013. 9. 16. 18:17

아래같은 복잡한 java코드를 reflection으로 어떻게 하는걸까? getInstance()가 있어서 복잡하군..


PopupWindowManager.getInstance().showBasicPopup(this, "Message", 
        new View.OnClickListener(), new View.OnClickListener());
이간단한 코드를 reflection으로 하는데는 아래처럼 복잡한 코드가 된다. ㅠㅜ
 
try {
    Class clz = Class
            .forName("com.skplanet.ocb.util.PopupWindowManager");
    if (clz == null) {
        return handle;
    }

    Method im = clz.getDeclaredMethod("getInstance");
    if (im == null) {
        return handle;
    }

    Object sinstance = im.invoke(null);
    if (sinstance == null) {
        return handle;
    }

    Method m = clz.getDeclaredMethod("showBasicPopup", Context.class,
            String.class, String.class, String.class,
            View.OnClickListener.class, View.OnClickListener.class);

    if (m == null) {
        return handle;
    }

    m.invoke(sinstance, context, message, okTitle, cancelTitle,
            oklistener, cancellistener);
} catch (Exception e) {
    e.printStackTrace();
}

minSdkVersion=10환경에서 APILevel=11인 startActivities를 호출하고 싶다.. 빌어먹을 빌드도 안된다.

Intent[] is = new Intent[intents.size()];
startActivities(intents.toArray(is));

이럴때도 아래처럼 Reflection을 써야 한다.

Intent[] is = new Intent[intents.size()];
Class clz = getClass();
Method method = clz.getMethod("startActivities", new Class[] {Intent[].class});
method.invoke(this, new Object[] {intents.toArray(is)});


'Android > Java TIP' 카테고리의 다른 글

apk decompile  (0) 2013.10.15
Volatile and Synchronized  (0) 2013.08.14
R.java can't find  (0) 2013.07.25
JD-Eclipse  (0) 2013.02.05
Java, Javac  (0) 2013.02.04
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함