Java 没有UI调用时为什么调用FromErrorThreadException?
我有一个Java 没有UI调用时为什么调用FromErrorThreadException?,java,android,android-asynctask,Java,Android,Android Asynctask,我有一个AsyncTask,它调用一个webservice方法并将返回的数据发送回主线程。此任务不会影响任何UI元素,但会在调用onResultSuccess的行上抛出CalledFromErrorThreadException。我还有许多其他的AsyncTask,它们基本上以完全相同的方式工作,更改被调用的web服务方法和参数等,但这是唯一一个失败的。有人发现了什么问题吗?AsyncTask看起来像: public static class ClockOff extends AsyncTask
AsyncTask
,它调用一个webservice方法并将返回的数据发送回主线程。此任务不会影响任何UI元素,但会在调用onResultSuccess的行上抛出CalledFromErrorThreadException
。我还有许多其他的AsyncTask
,它们基本上以完全相同的方式工作,更改被调用的web服务方法和参数等,但这是唯一一个失败的。有人发现了什么问题吗?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;
}
}
}
它被称为via:
ClockOff co= new ClockOffItem();
co.setOnResultListener(onAsyncResultClockOff);
co.execute(items, ID);
其中,
onSyncResultLockoff
实现了OnResultFail()
和onResultAccess
方法。可能是您正在另一个线程(而不是UI)中创建异步任务。您可以发布完整的堆栈跟踪吗?我相信异常来自实际的方法实现。它与所有其他异步任务在完全相同的线程中创建,它们都按预期工作@你的意思是什么方法?如果您指的是OnResultSuccess
方法,则此方法的第一行甚至没有命中。
ClockOff co= new ClockOffItem();
co.setOnResultListener(onAsyncResultClockOff);
co.execute(items, ID);