我有一个AsyncTask GoogleBookAsyncTask
,我想在一个
分段。我正在关注这个其他的SO
post。它需要我的
片段类BookListingActivityFragment
来实现接口
AsyncResponse
并声明其抽象方法onProcessFinish()
。
我片段中的onProcessFinish()
声明为匿名
一流的生活。
public GoogleBookAsyncTask mGoogleBookAsyncTask = new GoogleBookAsyncTask(new AsyncResponse() {
@Override
public void processFinish(ArrayList<Book> bookArrayList) {
mBookArrayAdapter.clear();
mBookArrayAdapter = new BookAdapter(getContext(), bookArrayList);
mBookArrayAdapter.notifyDataSetChanged();
}
});
我收到错误must either be declared abstract or implement abstract
method
。如果我将processFinish()
声明为a,则此错误消失
常规的非内部阶级。我该如何解决这个错误?我需要
执行mGoogleBookAsyncTask.execute()
以从我的AsyncTask获取数据
类。
我的应用程序的完整源代码可以找到here。
答案 0 :(得分:2)
如果我实现AsyncResponse,我必须声明
processFinish
是的,完全该错误告诉您的内容。
但如果我没有实现
AsyncResponse
界面,我仍然可以运行所有内容并且可以正常运行。
那么为什么要关心这个错误?
如果您想解决问题,那么执行在类上实现接口,而不是这样做。
public class BookListingActivityFragment extends Fragment
implements AsyncResponse {
private GoogleBookAsyncTask mGoogleBookAsyncTask;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// .......
// Pass "delegate" interface as 'this'
mGoogleBookAsyncTask = new GoogleBookAsyncTask(this);
mmGoogleBookAsyncTask.execute();
}
// This is the interface implementation that is called from the AsyncTask
@Override
public void processFinish(ArrayList<Book> bookArrayList) {
mBookArrayAdapter.clear();
mBookArrayAdapter = new BookAdapter(getContext(), bookArrayList);
mBookArrayAdapter.notifyDataSetChanged();
}
}
答案 1 :(得分:0)
如果错误是我认为的错误,它应该几乎完全说出来:anonymous class <your class> is not abstract, and does not implement method <some method> from <some interface>
。如果这是您所看到的,那么这意味着您没有在该接口中实现另一个抽象方法。