我对Android很新,并尝试使用第3部分api发送邮件。我几乎完成了所有编码然后我发现android 3.0+不允许在主线程上进行网络操作,唯一的办法就是添加它在将活动扩展到Async之后Async.Below是我的代码。但是我得到一个错误“Void是变量onCreate的无效类型”。我不知道变量onCreate应该是什么样的有效类型。任何人都可以解决这个问题吗?感谢
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
//import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class ZZZ extends Activity{
public class done extends AsyncTask<Void, Void, Void>{
@Override
protected Void doInBackground(Void... params) {
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.activity_main);
Button addImage = (Button) findViewById(R.id.send_email);
addImage.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Mail m = new Mail("my@domain.com", "password");
String[] toArr = {"mail1@domain.com", "mail2@domain.com"};
m.setTo(toArr);
m.setFrom("mymail@gmail.com");
m.setSubject("This is an email sent using my Android device.");
m.setBody("Email body.");
try {
m.addAttachment("/storage/somethinghere");
if(m.send()) {
Toast.makeText(ZZZ.this, "Email was sent successfully.", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(ZZZ.this, "Email was not sent.", Toast.LENGTH_LONG).show();
}
} catch(Exception e) {
//Toast.makeText(MailApp.this, "There was a problem sending the email.", Toast.LENGTH_LONG).show();
Log.e("MailApp", "Could not send email", e);
}
}
});
}}
}
}
答案 0 :(得分:0)
哇。我们在这里尝试在了解Java(和Android ..)的最基本内容之前尝试进行Android开发。在Java中,您无法在方法内部定义方法。此外,AsyncTask
必须定义您希望在后台完成的精确工作,然后在该工作完成时您希望在主线程上执行的操作。您在这里将AsyncTask
与Activity
混合在一起。您已经定义了一个内部类(AsyncTask
),但是在doInBackground
的{{1}}方法内部,您开始尝试覆盖AsyncTask
方法onCreate
1}}类。看起来像复制粘贴可怕的错误。你永远不会解决这些类型的问题,除非你稍微退出Android并学习Java /通用编程。你不能只在Activity
中包含任意代码,并期望它解决在主线程上执行长时间运行工作的所有问题,因为......这甚至都不能编译。
您需要在活动的AsyncTask
内设置按钮和onClickListener
,然后让onCreate
通过创建内部的新实例来激活onClick
您定义并在其上调用AsyncTask
的类。
这是基本结构:
execute()