AndroidKnife / RxBus

Event Bus By RxJava.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

RxBus 2.x don't support return-object of interface's type and parameter of interface's type

artshell opened this issue · comments

RxBus 2.x don't support return-object of interface's type and parameter of interface's type ?

    @Subscribe(
            thread = EventThread.NEW_THREAD,
            tags = {@Tag(Constants.EventType.EAT_MORE)}
    )
    public void eatMore(List<String> foods) {
        Log.i(TAG, "eat: foods => " + foods);
    }

    @Produce(
            thread = EventThread.NEW_THREAD,
            tags = {@Tag(Constants.EventType.EAT_MORE)}
    )
    public List<String> produceMoreFood() {
        return Arrays.asList("banana", "apple", "egg");
    }

log info here:

Caused by: java.lang.IllegalArgumentException: Method public void com.hwangjr.rxbus.app.TestActivity.eatMore(java.util.List) has @subscribe annotation on interface java.util.List which is an interface. Subscription must be on a concrete class type.
at com.hwangjr.rxbus.finder.AnnotatedFinder.loadAnnotatedMethods(AnnotatedFinder.java:72)
at com.hwangjr.rxbus.finder.AnnotatedFinder.loadAnnotatedProducerMethods(AnnotatedFinder.java:40)
at com.hwangjr.rxbus.finder.AnnotatedFinder.findAllProducers(AnnotatedFinder.java:157)
at com.hwangjr.rxbus.finder.Finder$1.findAllProducers(Finder.java:23)
at com.hwangjr.rxbus.Bus.register(Bus.java:179)
at com.hwangjr.rxbus.app.TestActivity.onCreate(TestActivity.java:24)
at android.app.Activity.performCreate(Activity.java:5231)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) 
at android.app.ActivityThread.access$800(ActivityThread.java:135) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:136) 
at android.app.ActivityThread.main(ActivityThread.java:5001) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
at dalvik.system.NativeStart.main(Native Method) 

After modify sucess do:

    @Subscribe(
            thread = EventThread.NEW_THREAD,
            tags = {@Tag(Constants.EventType.EAT_MORE)}
    )
    public void eatMore(ArrayList<String> foods) {
        Log.i(TAG, "eat: foods => " + foods);
    }

    @Produce(
            thread = EventThread.NEW_THREAD,
            tags = {@Tag(Constants.EventType.EAT_MORE)}
    )
    public ArrayList<String> produceMoreFood() {
        return new ArrayList<>(Arrays.asList("banana", "apple", "egg"));
    }

yes, just like the thrown said: Subscription must be on a concrete class type!