Странная ошибка AsyncTask для Android, я не могу понять - PullRequest
0 голосов
/ 21 октября 2011

Поэтому я использую AsyncTask для выполнения вызова моей службы Windows WCF. Пока все прошло хорошо, я могу заставить его вызывать метод, который возвращает строку и отображать ее в приложении. Но при попытке использовать методы, которые возвращают bool, я получаю некоторые ошибки ..

Код

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 (), код останавливается и заканчивается на последней строке внутри Catch () вот так и e равно нулю .. Нет ли исключения? Я могу видеть значение result.tostring () это либо true, либо false, поскольку wcf возвращает его. Но где-то все выходит из строя, и я не знаю, что с этим делать: / !!

like this e is null I can see the value of result.tostring()

Ответы [ 2 ]

1 голос
/ 21 октября 2011

Я хотел бы отметить одну вещь: вы должны использовать .equals ("true") вместо "== true" для сравнения ваших строк

рад, что это сработало:)

0 голосов
/ 21 октября 2011

Я думаю, что-то не так в вашей настройке. Невозможно, чтобы программа действительно достигла точки останова return false, как это было на вашем скриншоте, поскольку bugged равно true. Кроме того, на вашем втором скриншоте вы еще не в catch, а в return false во внутренней части попытки. Это утверждение не будет генерировать исключение, поэтому, если вы попадете в ловушку, это будет очень странно. Я предполагаю, что развернутый код и код в вашей IDE не идентичны. Если я посмотрю на код, который вы вставили, и код, на котором вы сделали скриншот, то они тоже не идентичны. Исправьте эту проблему развертывания, исправьте точку SnowyTracks, упомянутую в комментарии, и посмотрите, что произойдет потом.

...