Async和onCreate错误

时间:2013-04-28 15:16:48

标签: java android

我对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); 
      } 
    } 
  });


}}
}
}

1 个答案:

答案 0 :(得分:0)

哇。我们在这里尝试在了解Java(和Android ..)的最基本内容之前尝试进行Android开发。在Java中,您无法在方法内部定义方法。此外,AsyncTask必须定义您希望在后台完成的精确工作,然后在该工作完成时您希望在主线程上执行的操作。您在这里将AsyncTaskActivity混合在一起。您已经定义了一个内部类(AsyncTask),但是在doInBackground的{​​{1}}方法内部,您开始尝试覆盖AsyncTask方法onCreate 1}}类。看起来像复制粘贴可怕的错误。你永远不会解决这些类型的问题,除非你稍微退出Android并学习Java /通用编程。你不能只在Activity中包含任意代码,并期望它解决在主线程上执行长时间运行工作的所有问题,因为......这甚至都不能编译。

您需要在活动的AsyncTask内设置按钮和onClickListener,然后让onCreate通过创建内部的新实例来激活onClick您定义并在其上调用AsyncTask的类。

这是基本结构:

execute()