2013-04-28 2 views
0

Я довольно новичок в android и пытаюсь отправить почту с третьей частью api.I сделал почти все кодировки, тогда я обнаружил, что Android 3.0+ не позволяет выполнять сетевые операции в основном потоке, и единственный способ - для добавления его в Async.Below - это мой код после расширения активности до Async.But, я получаю сообщение об ошибке «Void - это недопустимый тип для переменной onCreate». Я не знаю, какой должен быть допустимый тип для переменной onCreate. Может кто-нибудь решить вопрос? СпасибоAsync и onCreate error

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("[email protected]", "password"); 

     String[] toArr = {"[email protected]", "[email protected]"}; 
     m.setTo(toArr); 
     m.setFrom("[email protected]"); 
     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

о мой. ну .. вы хотите определить AsyncTask как отдельный класс, а затем создать AsyncTask _within_ свой метод onCreate вашей деятельности, и всякий раз, когда вы хотите его отключить, вы делаете это как поток, вызывая 'start()'. ... –

+0

Извините ... Я не понимаю, что вы имеете в виду. Познакомившись с noob, изучая java + android.So, пожалуйста, будьте немного краткими. Большой краткий привет также: D.But, пожалуйста, не издевательства :) – 2013-04-28 15:28:34

ответ

0

Wow. То, что мы имеем здесь, - это попытка разработки Android, прежде чем узнать самые простые вещи о Java (и Android ..). В Java вы не можете определить метод внутри метода. Кроме того, AsyncTask должен определить точную работу, которую вы хотите сделать в фоновом режиме, а затем то, что вы хотите выполнить в основном потоке, когда эта работа будет нарушена. Вы здесь смешиваете AsyncTask с Activity. Вы определили внутренний класс (AsyncTask), но затем внутри метода doInBackgroundAsyncTask вы начинаете пытаться переопределить метод onCreate класса Activity. Кажется, что копия-паста ушла ужасно неправильно. Вы никогда не решите эти проблемы, если не будете немного отходить от Android и просто изучите Java/общее программирование. Вы не можете просто обернуть произвольный код внутри AsyncTask и ожидать, что он разрешит все проблемы выполнения длительной работы над основным потоком, потому что ... ну это даже не компилируется.

Вы должны настроить свою кнопку и onClickListener внутри onCreate активности и затем, что onClick огня AsyncTask путем создания нового экземпляра этого внутреннего класса вы определяете и вызывая execute() на нем.

Вот основная структура:

public class ZZZ extends Activity{ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Button button = new Button(R.id.button); 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       new MyTask().execute(); 
      } 
     }); 
    } 


    class MyTask extends AsyncTask<Void, Void, Void> { 

     @Override 
     protected Void doInBackground(Void... params) { 
      return null; //do stuff here. 
     } 

     @Override 
     protected void onPostExecute(Void aVoid) { 
      super.onPostExecute(aVoid); 
      //manipulate UI thread here when the background work is done 
     } 
    } 
} 
+0

Lol. ................................................................................................. – 2013-04-28 16:02:38

+0

@ user2329333 Да, я был там человек. Удачи. Очень зрелый из вас, чтобы ответить так хорошо после того, как я был по общему признанию немного суровым на вас;) – LuxuryMode

+0

Ха-ха ... Я сделал ошибку, и я должен признать это: P.Не убегайте за нее :) – 2013-04-28 16:19:45

Смежные вопросы