2014-09-29 4 views
0

Что у меня есть это AsyncTask, что я использую его для передачи данных в веб-службы, которые работают нормально, а вот мой код веб-сервис:Как я могу проверить возвращаемое значение из веб-службы с помощью AsyncTask

public class WebServiceDetails { 
    //Namespace of the Webservice - can be found in WSDL 
    private static String NAMESPACE = "http://tempuri.org/"; 
    //Webservice URL - WSDL File location  
    //URL = "http://80.90.161.246:70/erP_Reporting/OrderAndroid.asmx"; 
    private static String URL = "http://192.168.1.124/alibabanewwebservice/AliBabaWebService.asmx";//Make sure you changed IP address 
    //private static String URL = "http://192.168.1.103/webservicejal6ah/OrderAndroid.asmx";//Make sure you changed IP address 
    //SOAP Action URI again Namespace + Web method name 
    private static String SOAP_ACTION = "http://tempuri.org/InsertOrderDetails"; 

    public static boolean invokeLoginWS(String DeviceId, String Item_id, String Item_Quantity,String Bounce,String webMethName) 
    { 
     boolean loginStatus = false; 
     // Create request 
     SoapObject request = new SoapObject(NAMESPACE, webMethName); 
     // Property which holds input parameters 
     PropertyInfo deviceid = new PropertyInfo(); 
     PropertyInfo itemid = new PropertyInfo(); 
     PropertyInfo quantity = new PropertyInfo(); 
     PropertyInfo bounce= new PropertyInfo(); 


     deviceid.setName("DeviceId"); 
     deviceid.setValue(DeviceId); 
     deviceid.setType(String.class); 
     request.addProperty(deviceid); 


     itemid.setName("Item_id"); 
     itemid.setValue(Item_id); 
     itemid.setType(String.class); 
     request.addProperty(itemid); 


     quantity.setName("Item_Quantity"); 
     quantity.setValue(Item_Quantity); 
     quantity.setType(String.class); 
     request.addProperty(quantity); 


     bounce.setName("Bounce"); 
     bounce.setValue(Bounce); 
     bounce.setType(String.class); 
     request.addProperty(bounce); 

//  extra.setName("Extra"); 
//  extra.setValue(Extra); 
//  extra.setType(String.class); 
//  request.addProperty(extra); 


     // Create envelope 
     SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(1); 
     envelope.dotNet = true; 
     // Set output SOAP object 
     envelope.setOutputSoapObject(request); 
     // Create HTTP call object 
     HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 


     try { 
      // Invoke web service 
      androidHttpTransport.call(SOAP_ACTION, envelope); 
      // Get the response 
//   SoapPrimitive response = (SoapPrimitive) envelope.getResponse(); 
      Object response = (Object) envelope.getResponse(); 
      // Assign it to boolean variable variable 
      loginStatus = Boolean.parseBoolean(response.toString()); 

     } catch (Exception e) { 
      //Assign Error Status true in static variable 'errored' 

      e.printStackTrace(); 
     } 
     //Return booleam to calling object 
     return loginStatus; 
    } 
} 

а вот мой AsyncTask:

private class AsyncCallWS extends AsyncTask<Void, Void, Void> { 



    protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 
     Log.e("Customer_Name","sereen"); 
     //Make Progress Bar invisible 


     //AddToCart.cartlist.clear(); 
     try{ 
      //Log.e(" Customer_Id=masterrs.get(m).getCustomerId()", rs.get(m).getCustomerId()); 
      Toast.makeText(CartList.this, "order has been send ", Toast.LENGTH_LONG).show(); 
      } 
     catch(Exception e){ 
      e.printStackTrace(); 
     } 

    } 


    //Make Progress Bar visible 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     pd.setTitle("sending"); 
     pd.setMessage("waiting..."); 
     pd.show(); 
    } 



    @Override 
    protected Void doInBackground(Void... params) { 
     // TODO Auto-generated method stub 


      loginStatus2 = WebServiceDetails.invokeLoginWS(Device_ID,Item_Id,Quantity,Bounce,"InsertOrderDetails"); 
      Log.e("Device_ID details",Device_ID+""); 
//   try{ 
      //Log.e(" Customer_Id=masterrs.get(m).getCustomerId()", rs.get(m).getCustomerId()); 

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


     return null; 
    } 
    } 

хорошо, проблема в том, как вы можете видеть мое возвращение AsyncTask нулевое значение, и я хочу это после того, как я отправить значение для возвращения верно для (loginStatus2), но дело в том, когда я пытался чтобы сделать это, это не сработало .. может кто-нибудь мне помочь, что я должен изменить, чтобы получить значение tr ue, когда сообщение о успехе в веб-сервисе и ложь, когда он терпит неудачу?

+0

Вы используете 'недействительная onPostExecute' сделать его возвращение типа' boolean' –

+0

он дал мне ошибку: super.onPostExecute (loginStatus2); – sereen

+0

: Метод onPostExecute (Void) в типе AsyncTask не применим для аргументов (boolean) – sereen

ответ

1

Попробуйте этот код для AsyncTask. Используйте результат и проверьте, является ли он нулевым или нет.

Если null, ответа нет, у вас может быть ответ в виде результата из метода Asynctask().

private class AsyncCallWS extends AsyncTask<Void, Void, String> { 
String response; 


protected void onPostExecute(String result) { 
    super.onPostExecute(result); 
    if(result==null){ 
     Toast.makeText(CartList.this, "result is null", Toast.LENGTH_LONG).show(); 
}else{ 
     Toast.makeText(CartList.this, "Result is: "+ result, Toast.LENGTH_LONG).show(); 
    } 
    try{ //Your code here 
     //Log.e(" Customer_Id=masterrs.get(m).getCustomerId()", rs.get(m).getCustomerId()); 
     Toast.makeText(CartList.this, "order has been send ", Toast.LENGTH_LONG).show(); 
     } 
    catch(Exception e){ 
     e.printStackTrace(); 
    } 

} 


//Make Progress Bar visible 
protected void onPreExecute() { 
    super.onPreExecute(); 
    pd.setTitle("sending"); 
    pd.setMessage("waiting..."); 
    pd.show(); 
} 

@Override 
protected Void doInBackground(Void... params) { 
    // TODO Auto-generated method stub 


     loginStatus2 = WebServiceDetails.invokeLoginWS(Device_ID,Item_Id,Quantity,Bounce,"InsertOrderDetails"); 
     response = loginStatus2; 
     Log.e("Device_ID details",Device_ID+""); 

    } 


    return response; 
} 
}