MainActivity не является включающим классом в классе фрагмента. - PullRequest
0 голосов
/ 12 декабря 2018

У меня открыто два проекта Android Studio.Одним из них является само приложение, другим является проект тестирования.В проекте тестирования я использовал этот код в MainActivity.java, и он работал отлично.Теперь, когда я пытаюсь перенести его в свой проект приложения, он не работает.Возможно, потому что код находится внутри класса фрагмента, а не MainActivity.

Это код, о котором я говорю:

private class SendMailTask extends AsyncTask<Message, Void, Void> {
    private ProgressDialog progressDialog;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        progressDialog = ProgressDialog.show(MainActivity.this, "Please wait", "Sending mail", true, false);
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
        progressDialog.dismiss();
    }

    @Override
    protected Void doInBackground(Message... messages) {
        try {
            Transport.send(messages[0]);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
        return null;
    }
}

Он просто отображает сообщение «Отправка электронной почты», пока оно делает это на экране.Я не уверен, если мне нужно скопировать весь класс, если это необходимо, поэтому скажите мне, если это так.

Ошибка показана в этой строке:

progressDialog = ProgressDialog.show(MainActivity.this, "Please wait", "Sending mail", true, false);

Он говорит: 'com.example.private.privateprivate.MainActivity «не является включающим классом».

Я не уверен, что делать, так как если я добавлю MainFragment.this, он выдаст ошибку и скажет: «Неверный 1-й тип аргумента.Найдено: 'com.example.private.privateprivate.MainFragment', обязательно: 'android.content.Context'

1 Ответ

0 голосов
/ 12 декабря 2018

Используйте getActivity() в качестве первого аргумента.

Вам необходим объект Context для вызова show().Когда ваш AsyncTask жил внутри действия, способ получить его - ссылаться на включающее действие непосредственно, используя MainActivity.this.Теперь, когда ваша задача жить внутри фрагмента, вы не можете этого сделать.Но у фрагментов есть метод getActivity(), который возвращает их активность, поэтому вы можете использовать его вместо этого.

...