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!