0

Web サービス メソッドをAsyncTask呼び出し、返されたデータをメイン スレッドに送り返す があります。このタスクは、まだ UI 要素に影響を与えずCalledFromWrongThreadException、 を呼び出している行でスローしonResultSuccessます。呼び出された Web サービスのメソッドやパラメーターを変更するなど、基本的にまったく同じ方法で動作する他の多くのAsyncTaskものがありますが、失敗するのはこれだけです。誰が問題の可能性を見つけますか? 次のAsyncTaskようになります。

public static class ClockOff extends AsyncTask<String, Void, Void> 
{

public OnAsyncResultClockOff onAsyncResultClockOff;
public void setOnResultListener(OnAsyncResultClockOff onAsyncResultClockOff) {
    if(onAsyncResultClockOff != null) {
        ResultClockOff = onAsyncResultClockOff;
    }
}

private static final String SOAP_ACTION = "http://tempuri.org/ClockOff";
private static final String METHOD_NAME = "ClockOff";
private static final String NAMESPACE = "http://tempuri.org/";
private static final String URL = GlobalFunction.URL;
@Override
protected Void doInBackground(String... strArgs) 
{
    try
    {
        SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME);
         Request.addProperty("Items", strArgs[0]);
         Request.addProperty("ID", strArgs[1]);

         SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
         soapEnvelope.dotNet = true;
         soapEnvelope.setOutputSoapObject(Request);
         HttpTransportSE transport= new HttpTransportSE(URL);
         transport.call(SOAP_ACTION, soapEnvelope);
         SoapObject result = (SoapObject) soapEnvelope.bodyIn;

         String ReturnMessage = ((SoapObject) result.getProperty(0)).getPropertyAsString(0);
         String ReturnMessageHeader = ((SoapObject) result.getProperty(0)).getPropertyAsString(1);
         String ActionType = ((SoapObject) result.getProperty(0)).getPropertyAsString(2);
         String SelectedCompleted = ((SoapObject) result.getProperty(0)).getPropertyAsString(3);
         String ClockOffItems = ((SoapObject) result.getProperty(0)).getPropertyAsString(4);

         //Exception thrown on the below line
         onAsyncResultClockOffItem.onResultSuccess(ReturnMessage, ReturnMessageHeader, ActionType, SelectedCompleted, ClockOffItems);
         return null;
    }
    catch (Exception e) 
    {
        onAsyncResultClockOffItem.onResultFail();
        return null;
    }
}
}

OnAsyncResultClockOff単純です:

public interface OnAsyncResultClockOff {
    public abstract void onResultFail();
    public abstract void onResultSuccess(String returnMessage,
            String returnMessageHeader, String actionType,
            String selectedCompleted, String clockOffItems);
}

そして、次の方法で呼び出されます。

ClockOff co= new ClockOffItem();
co.setOnResultListener(onAsyncResultClockOff);
co.execute(items, ID);

メソッドとメソッドをonAsyncResultClockOff実装する場所。OnResultFail()OnResultSuccess

4

0 に答える 0