2011-10-21 14 views
0

私は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 thise is null ..キャストはありませんか? I can see the value of result.tostring() wcfが返すときにtrueまたはfalseのいずれかになります。しかし、どこかにバグがあり、私は何を作るべきか分からない:/ !!

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

+1

一つのことを働いた

が喜んで、あなたの文字列を比較することではなく、「真==」よりも.equals(「真」)を使用しなければならないということですあなたの文字列を比較するには、 "== true"ではなく.equals( "true")を使用しなければならないということです。 – SnowyTracks

+0

oh thats just wierd .. .equalsはトリックを行いました...これでメソッドが完成し、適切な値が返されます。この文章で答えを出すことができますか?私はあなたに答えを与えることができますか? :) – Anders

+0

あなたの日食版は何ですか?どのコンパイラレベルを使用していますか –

答えて

1

一つのことは、それは私が注意します:)

0

私は何かがあなたのセットアップで台無しだと思います。 buggedtrueなので、スクリーンショットでのようにプログラムが実際にブレークポイントreturn falseに到達することはありません。さらに、2回目のスクリーンショットではまだcatchには入っていませんが、試しの内側のreturn falseにあります。このステートメントは例外をスローしないので、catchに終わると非常に奇妙です。私の推測では、あなたのIDEの配備されたコードとコードが同一ではないということです。貼り付けたコードとスクリーンショットを作成したコードを見ると、どちらも同じではありません。この展開の問題を修正し、コメントに記載されているSnowyTracksのポイントを修正し、その後何が起こるかを見てください。私は注意します