我打开了两个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,它会给出一个错误并说:'第一个参数类型错误。找到:“ com.example.private.privateprivate.MainFragment”,必需:“ android.content.Context”
答案 0 :(得分:0)
使用getActivity()
作为第一个参数。
您需要一个Context
对象才能调用show()
。当您的AsyncTask位于某个活动内部时,获取活动的方法是直接使用MainActivity.this
引用该合并活动。现在您的任务位于一个Fragment中,您将无法执行此操作。但是片段具有getActivity()
方法,该方法将返回其活动,因此您可以改用它。