Я создал простую почтовую программу, которая использует AsyncTask для выполнения. В методе doInBackground я инициирую объект Mail класса, который создает почтовый объект, который принимает параметры, такие как учетные данные, объект электронной почты, тело и приложение. В любом случае, я хочу getText() из нескольких полей EditText и передать их как тело письма, но проблема в том, что я не могу использовать метод getText() внутри метода doInBackground, поэтому это создает проблему.Метод getText должен быть вызван из потока пользовательского интерфейса, текущий вывод - рабочий
Вот и весь основной вид деятельности. Я не могу найти способ логически обойти это эффективным образом.
public class MainActivity extends Activity {
public static File imageFile;
public static EditText etM, etU, etO;
public static Spinner elk;
String[] elks = {"ED 1", "ED 2", "ED 3", "ED 4", "ED 5", "ED 6",
"ED 7", "ED 8", "ED 9", "ED 10", "ED 11"};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_item, elks);
spElk = (Spinner) findViewById(R.id.spElk);
spElk.setAdapter(adapter);
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
final Button send = (Button) this.findViewById(R.id.bSubmit);
send.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
new MainActivity.MailSender().execute();
}
});
Button ibCam = (Button) findViewById(R.id.ibCam);
ibCam.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
imageFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "temp.jpg");
Uri tempUri = Uri.fromFile(imageFile);
intent.putExtra(MediaStore.EXTRA_OUTPUT, tempUri);
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
startActivityForResult(intent, 0);
}
});
}
class MailSender extends AsyncTask<Void, Integer, Integer>
{
ProgressDialog pd = null;
/* (non-Javadoc)
* @see android.os.AsyncTask#onPreExecute()
*/
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
pd = new ProgressDialog(MainActivity.this);
pd.setTitle("Uploading...");
pd.setMessage("Uploading logs. Please wait...");
pd.setCancelable(false);
pd.show();
}
/* (non-Javadoc)
* @see android.os.AsyncTask#doInBackground(Params[])
*/
@Override
protected Integer doInBackground(Void... params) {
etM = (EditText)findViewById(R.id.etM);
etU = (EditText)findViewById(R.id.etU);
etO = (EditText)findViewById(R.id.etO);
Mail m = new Mail("[email protected]", "pw123123");
String toAddresses = "[email protected]";
m.setToAddresses(toAddresses);
m.setFromAddress("[email protected]");
m.setMailSubject("Email subject");
m.setMailBody(spElk.getSelectedItem().toString() + etM.getText().toString(), etU.getText().toString());
try {
m.addAttachment(imageFile.getAbsolutePath());
if (m.send()) {
System.out.println("Message sent");
return 1;
} else {
return 2;
}
} catch (Exception e) {
Log.e("MailApp", "Could not send email", e);
}
return 3;
}
/* (non-Javadoc)
* @see android.os.AsyncTask#onPostExecute(java.lang.Object)
*/
@Override
protected void onPostExecute(Integer result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
pd.dismiss();
if(result==1)
Toast.makeText(MainActivity.this, "Sent.", Toast.LENGTH_LONG).show();
else if(result==2)
Toast.makeText(MainActivity.this, "Not sent.", Toast.LENGTH_LONG).show();
else if(result==3)
Toast.makeText(MainActivity.this, "Error sending message.", Toast.LENGTH_LONG).show();
}
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == 0){
switch(resultCode){
case Activity.RESULT_OK:
if(imageFile.exists()){
Toast.makeText(this, "Image saved at: " + imageFile.getAbsolutePath(), Toast.LENGTH_LONG).show();
}
break;
case Activity.RESULT_CANCELED:
Toast.makeText(this, "Error submitting image", Toast.LENGTH_LONG).show();
break;
default:
break;
}
}
}
}
Не учитывайте несоответствие наименований полей. Мне нужен способ получить эти значения и передать их на мой почтовый объект в методе doInBackground.
Использование 'findViewById' в' onPreExecute' вместо 'doInBackground' –