所以我使用AsyncTask來執行對我的Windows WCF服務的調用。到目前爲止它已經變好了,我可以調用一個返回一個字符串並在應用程序中顯示它的方法。但是,試圖返回一個布爾值,我得到了一些錯誤方法時..奇怪的Android AsyncTask錯誤我不明白
代碼
RegisterSeatTask task = new RegisterSeatTask();
task.execute(this);
protected class RegisterSeatTask extends AsyncTask<Context, Integer, String> {
protected String doInBackground(Context... arg0) {
try {
......
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
if (!LicenseHandler.RegisterSeat(licenseKey, ident,android.os.Build.DEVICE,tm.getDeviceId())) {
return "License is invalid or does not have any empty seats!";
}
......
}
protected void onPostExecute(String result) {
Toast.makeText(getBaseContext(), result, Toast.LENGTH_LONG).show();
}
}
public static boolean RegisterSeat(String License, String Identifier,
String Device, String DeviceID) {
try {
METHOD_NAME = "RegisterSeat";
SOAP_ACTION = "http://tempuri.org/IService/RegisterSeat";
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("License", License);
request.addProperty("MyIdentifier", Identifier);
request.addProperty("Device", Device);
request.addProperty("DeviceID", DeviceID);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.call(SOAP_ACTION, envelope);
SoapPrimitive result = (SoapPrimitive) envelope.getResponse();
if (result.toString().toLowerCase() == "true") {
return true;
}
// to get the data
return false;
} catch (Exception e) {
return false;
}
}
但是每次我運行的方法RegisterSeat()的代碼停止,並在捕捉裏面的最後一行結束了( )like this和e is null ..沒有任何投票? I can see the value of result.tostring()它是真或假,因爲wcf返回它。但是某處出現了一些錯誤,我不知道該怎麼做:/ !!
有一件事我要指出是你應該使用.equals(「true」)而不是「== true」來比較你的字符串 – SnowyTracks
哦,這只是更奇怪.. .equals做了伎倆......它現在完成了方法並返回正確的值。你能否用這段文字作答案,我可以給你答案? :) – Anders
你的eclipse版本是什麼?以及你使用的編譯器級別 –