Voici mon code. J'appelle Asynctask à l'intérieur du bouton d'envoi et appelle la méthode sendtoserver qui implémente le code du service Web dans la méthode doInBackground.AsyncTask Force Fermeture lors de l'appel de la méthode Webservice
package asynctask.com;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.app.ProgressDialog;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;
import android.support.v4.app.NavUtils;
public class Asyntask extends Activity {
boolean resultofmail;
Button send;
private static final String SOAP_ACTION = "http://sendmail.com/insertfeedback";
private static final String METHOD_NAME = "insertfeedback";
private static final String NAMESPACE = "http://sendmail.com/";
private static final String URL = "http://180.179.48.27:8080/sendmail /sendmailService?wsdl";
EditText ename;
EditText eid,reason;
DatePicker sdate,edate;
Spinner rfl;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.leaverequest);
send=(Button)findViewById(R.id.button1);
eid=(EditText)findViewById(R.id.editText1);
ename=(EditText)findViewById(R.id.editText2);
sdate=(DatePicker)findViewById(R.id.datePicker1);
edate=(DatePicker)findViewById(R.id.datePicker2);
rfl=(Spinner)findViewById(R.id.spinner1);
reason=(EditText)findViewById(R.id.editText3);
send.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
new MailSendingTask().execute((Void[])null);
}
});
}
public boolean sendtoserver()
{
int day =sdate.getDayOfMonth();
int month=sdate.getMonth()+1;
int year =sdate.getYear();
String stdate=day+"/"+month+"/"+year;
int day1 =edate.getDayOfMonth();
int month1=edate.getMonth()+1;
int year1 =edate.getYear();
String eddate=day1+"/"+month1+"/"+year1;
Toast.makeText(getApplicationContext(),stdate+" "+eddate,Toast.LENGTH_LONG).show();
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("name",ename.getText().toString());
request.addProperty("code",eid.getText().toString());
request.addProperty("date1",stdate);
request.addProperty("date2",eddate);
request.addProperty("leave",rfl.getSelectedItem().toString());
request.addProperty("reason",reason.getText().toString());
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
try {
androidHttpTransport.call(SOAP_ACTION, envelope);
Toast.makeText(getApplicationContext(),"Mail Sent",Toast.LENGTH_LONG).show();
return true;
}
catch (Exception e) {
Toast.makeText(getApplicationContext(),e.getMessage(),Toast.LENGTH_LONG).show();
return false;
}
}
public class MailSendingTask extends AsyncTask <Void, Void, Void> {
private ProgressDialog progressDialog;
@Override
protected void onPreExecute() {
this.progressDialog = ProgressDialog.show(
Asyntask.this,
"Doing Processing", // title
"Sending Data To Server", // message
true // indeterminate
);
}
@Override
protected Void doInBackground(Void... params) {
resultofmail=sendtoserver();
return null;
}
@Override
protected void onPostExecute(Void v) {
this.progressDialog.cancel();
if (resultofmail)
Toast.makeText(getApplicationContext(), "Mail sent", Toast.LENGTH_LONG).show();
else
Toast.makeText(getApplicationContext(), "Retry", Toast.LENGTH_LONG).show();
}
}
}
LogCat
10-03 00:23:38.600: E/AndroidRuntime(1770): FATAL EXCEPTION: AsyncTask #1
10-03 00:23:38.600: E/AndroidRuntime(1770): java.lang.RuntimeException: An error occured while executing doInBackground()
10-03 00:23:38.600: E/AndroidRuntime(1770): at android.os.AsyncTask$3.done(AsyncTask.java:200)
10-03 00:23:38.600: E/AndroidRuntime(1770): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
10-03 00:23:38.600: E/AndroidRuntime(1770): at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
10-03 00:23:38.600: E/AndroidRuntime(1770): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
10-03 00:23:38.600: E/AndroidRuntime(1770): at java.util.concurrent.FutureTask.run(FutureTask.java:138)
10-03 00:23:38.600: E/AndroidRuntime(1770): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
10-03 00:23:38.600: E/AndroidRuntime(1770): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
10-03 00:23:38.600: E/AndroidRuntime(1770): at java.lang.Thread.run(Thread.java:1019)
10-03 00:23:38.600: E/AndroidRuntime(1770): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
10-03 00:23:38.600: E/AndroidRuntime(1770): at android.os.Handler.<init>(Handler.java:121)
10-03 00:23:38.600: E/AndroidRuntime(1770): at android.widget.Toast.<init>(Toast.java:68)
10-03 00:23:38.600: E/AndroidRuntime(1770): at android.widget.Toast.makeText(Toast.java:231)
10-03 00:23:38.600: E/AndroidRuntime(1770): at asynctask.com.Asyntask.sendtoserver(Asyntask.java:89)
10-03 00:23:38.600: E/AndroidRuntime(1770): at asynctask.com.Asyntask$ReverseGeocodeLookupTask.doInBackground(Asyntask.java:140)
10-03 00:23:38.600: E/AndroidRuntime(1770): at asynctask.com.Asyntask$ReverseGeocodeLookupTask.doInBackground(Asyntask.java:1)
10-03 00:23:38.600: E/AndroidRuntime(1770): at android.os.AsyncTask$2.call(AsyncTask.java:185)
10-03 00:23:38.600: E/AndroidRuntime(1770): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
10-03 00:23:38.600: E/AndroidRuntime(1770): ... 4 more
10-03 00:23:38.770: W/IInputConnectionWrapper(1770): showStatusIcon on inactive InputConnection
10-03 00:23:39.250: E/WindowManager(1770): Activity asynctask.com.Asyntask has leaked window [email protected] that was originally added here
10-03 00:23:39.250: E/WindowManager(1770): android.view.WindowLeaked: Activity asynctask.com.Asyntask has leaked window [email protected] that was originally added here
10-03 00:23:39.250: E/WindowManager(1770): at android.view.ViewRoot.<init>(ViewRoot.java:259)
10-03 00:23:39.250: E/WindowManager(1770): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
10-03 00:23:39.250: E/WindowManager(1770): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
10-03 00:23:39.250: E/WindowManager(1770): at android.view.Window$LocalWindowManager.addView(Window.java:424)
10-03 00:23:39.250: E/WindowManager(1770): at android.app.Dialog.show(Dialog.java:241)
10-03 00:23:39.250: E/WindowManager(1770): at android.app.ProgressDialog.show(ProgressDialog.java:107)
10-03 00:23:39.250: E/WindowManager(1770): at android.app.ProgressDialog.show(ProgressDialog.java:90)
10-03 00:23:39.250: E/WindowManager(1770): at asynctask.com.Asyntask$ReverseGeocodeLookupTask.onPreExecute(Asyntask.java:129)
10-03 00:23:39.250: E/WindowManager(1770): at android.os.AsyncTask.execute(AsyncTask.java:391)
10-03 00:23:39.250: E/WindowManager(1770): at asynctask.com.Asyntask$1.onClick(Asyntask.java:67)
10-03 00:23:39.250: E/WindowManager(1770): at android.view.View.performClick(View.java:2485)
10-03 00:23:39.250: E/WindowManager(1770): at android.view.View$PerformClick.run(View.java:9080)
10-03 00:23:39.250: E/WindowManager(1770): at android.os.Handler.handleCallback(Handler.java:587)
10-03 00:23:39.250: E/WindowManager(1770): at android.os.Handler.dispatchMessage(Handler.java:92)
10-03 00:23:39.250: E/WindowManager(1770): at android.os.Looper.loop(Looper.java:123)
10-03 00:23:39.250: E/WindowManager(1770): at android.app.ActivityThread.main(ActivityThread.java:3683)
10-03 00:23:39.250: E/WindowManager(1770): at java.lang.reflect.Method.invokeNative(Native Method)
10-03 00:23:39.250: E/WindowManager(1770): at java.lang.reflect.Method.invoke(Method.java:507)
10-03 00:23:39.250: E/WindowManager(1770): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
10-03 00:23:39.250: E/WindowManager(1770): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
10-03 00:23:39.250: E/WindowManager(1770): at dalvik.system.NativeStart.main(Native Method)
NOTE - code Webservice est workingfFine sans AsyncTask tâche.
NOTE - La tâche asynchrone fonctionne correctement lorsque vous effectuez des calculs qui prennent beaucoup de temps directement dans la méthode doInBackground. Justement essayé cette méthode doInBackground à l'intérieur de son service Web de travail et de mise en œuvre, mais maintenant je me suis coincé dans progressdialog.It va disparaître.
if (Looper.myLooper() == null) {
Looper.prepare();
}
mLooper = Looper.myLooper(); resultofmail=sendtoserver();
Looper.loop();
return null;
Vous ne pouvez pas créer de gestionnaire dans une tâche asynchrone sans appeler Looper.prepare(). – AedonEtLIRA
Je ne comprends pas ce que vous dites. Le code fonctionne très bien lorsque j'utilise AsyncTask pour faire de plus gros calculs. Pourriez-vous s'il vous plaît expliquer et modifier mon code. –
if (Looper.myLooper() == null) { \t \t Looper.prepare(); \t \t} \t \t mLooper = Looper.myLooper(); \t \t \t \t \t resultofmail = sendToServer(); \t \t \t Zone répétée.boucle(); \t \t \t return null; Essayé à l'intérieur de doInBackGround Mais maintenant la méthode onPostExecute ne l'exécute pas dans la boîte de dialogue, mais moins Webservice est en train de l'implémenter. –