java如何使用dagger注入匿名内部类?
有可能是匿名类吗?我有以下错误:
java.lang.IllegalArgumentException: No inject registered for members/com.acme.MyFragment$1. You must explicitly add it to the 'injects' option in one of your modules.
例如:
public class MyFragment extends Fragment {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new MyTrask(getActivity()) {
protected void onPostExecute(String result) {
// Stuff
}
}.execute();
}
}
public class MyTask extends AsyncTask<Void, Void, String> {
@Inject
UserApi userApi;
public MyTask(Context context) {
App.getInstance().inject(this);
}
@Override
protected String doInBackground(Void... params) {
return "Hello World!";
}
}
# 1 楼答案
您应该将
AsyncTask
注入MyFragment
,而不是使用“new MyTask(…)”。MyTask
构造函数应该接受一个UserApi
实例和一个Context
对象,该对象可以由模块提供,代码类似于你的片段代码应该是这样的
你的AsyncTaskAPI应该是
注意,我使用了一个
Provider
来注入异步任务。这对于避免类似于“只能执行一次任务”的异常是必要的,如果对同一个AsyncTask对象多次调用execute
,就会出现这种异常。然后在模块injects = { }
注释参数下注册MyFragment
# 2 楼答案
你不能注入匿名类。但是你可以把它注入到片段中,它对于匿名类是可见的,在本例中是AsyncTask