Объявлен как внутренний класс, но ошибка «должна быть объявлена ​​абстрактной или реализованной» сохраняется

java android android-asynctask

70 просмотра

2 ответа

У меня есть AsyncTask, GoogleBookAsyncTaskкоторый я хочу запустить во фрагменте. Я следую за этим другим таким сообщением . Это требует, чтобы мой класс Fragment 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()как обычный не внутренний класс. Как я могу устранить эту ошибку? Мне нужно выполнить, mGoogleBookAsyncTask.execute()чтобы получить данные из моего класса AsyncTask.

Полный исходный код моего приложения можно найти здесь .

Автор: Sudhir Khanger Источник Размещён: 08.11.2019 11:23

Ответы (2)


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();
    }

}
Автор: cricket_007 Размещён: 21.08.2016 02:22

0 плюса

Если ошибка - то, что я думаю, это должно сказать это почти точно anonymous class <your class> is not abstract, and does not implement method <some method> from <some interface>. Если это то, что вы видите, то это означает, что вы не реализуете другой абстрактный метод в этом интерфейсе.

Автор: Ian S. Размещён: 21.08.2016 02:06
Вопросы из категории :
32x32