2013-05-27 41 views
0

我使用soap方法发送请求。然后,我将字符串变量中的响应存储在doInBackground中,然后检查onPostExecute条件。 但正如我一步一步检查它,我才知道这是清除值onPostExecute。 如何解决这个问题?AsyncTask在onPostExecute中清除响应

protected Void doInBackground(Void... args) { 

     request = new SoapObject(NAMESPACE, METHOD_NAME); 

     username = new PropertyInfo(); 
     username.setName("UserName"); 
     username.setValue(Username); 
     username.setType(String.class); 
     request.addProperty(username); 

     password = new PropertyInfo(); 
     password.setName("Password"); 
     password.setValue(Password); 
     password.setType(String.class); 
     request.addProperty(password); 

     SoapSerializationEnvelope envp = new SoapSerializationEnvelope(
       SoapEnvelope.VER11); 
     envp.dotNet = true; 
     envp.setOutputSoapObject(request); 
     HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 
     try { 
      androidHttpTransport.call(SOAP_ACTION, envp); 
      SoapPrimitive response = (SoapPrimitive) envp.getResponse(); 
      Response = response.toString(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 

     if (dialog != null) { 
      dialog.dismiss(); 
      dialog = null; 
     } 

     if (Response.equals("Fail")) { 
      etPassword.setText(""); 
      textValidation.setText("UserName Or Password is Wrong."); 

     } else { 
      etUsername.setText(""); 
      etPassword.setText(""); 
     } 
    } 
+0

你的问题的一些代码将是有益的。 –

+0

查看编辑过的帖子。 –

回答

0

你如何声明你的AsyncTask类?

据异步任务使用的AsyncTask documentation

三种类型如下:

PARAMS,在执行时发送给任务的参数的类型。 进度,在 背景计算期间发布的进度单位的类型。结果,背景计算结果的类型。并非所有类型都始终由异步任务使用。要将某个类型标记为未使用,只需使用类型Void即可。

它应该是这样的:

private class MyAsyncTask extends AsyncTask<Param, Progress, Result> 

这将定义doInBackground()签名如下:

protected Result doInBackground(Param... params) 

然后,您可以在doInBackground()代替null最终返回结果。

编辑:

适用于您例如,应该看是这样的:

public class MyAsyncTask extends AsyncTask<Void, int[], String> { 

    protected Void doInBackground(Void... args) { 

     request = new SoapObject(NAMESPACE, METHOD_NAME); 

     username = new PropertyInfo(); 
     username.setName("UserName"); 
     username.setValue(Username); 
     username.setType(String.class); 
     request.addProperty(username); 

     password = new PropertyInfo(); 
     password.setName("Password"); 
     password.setValue(Password); 
     password.setType(String.class); 
     request.addProperty(password); 

     SoapSerializationEnvelope envp = new SoapSerializationEnvelope(
     SoapEnvelope.VER11); 
     envp.dotNet = true; 
     envp.setOutputSoapObject(request); 
     HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 

     try { 
      androidHttpTransport.call(SOAP_ACTION, envp); 
      SoapPrimitive response = (SoapPrimitive) envp.getResponse(); 
      // return your result here 
      return response.toString(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     // return null if something went wrong 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String result) { 

     if (dialog != null) { 
      dialog.dismiss(); 
      dialog = null; 
     } 

     if (result == null) { 
      // handle null here, for example : 
      // result = "Fail"; 
     } 

     // use "Fail".equals(result) instead of result.equals("Fail") 
     // to avoid error if result is null 
     if ("Fail".equals(result)) { 
      etPassword.setText(""); 
      textValidation.setText("UserName Or Password is Wrong."); 

     } else { 
     etUsername.setText(""); 
     etPassword.setText(""); 
     } 
    } 
}