声明为内部类,但错误"必须声明为抽象或实现"仍然存在

时间:2016-08-20 13:56:23

标签: java android android-asynctask

我有一个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

2 个答案:

答案 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>。如果这是您所看到的,那么这意味着您没有在该接口中实现另一个抽象方法。