2

Web サービスと対話する Android アプリがあります。base64 文字列としてサービスから画像をダウンロードします。これはプロセスです:

:: アプリは 10 秒ごとに Wi-Fi をポーリングします

::wifi内>新しい画像を取得するためのリクエストを送信します

::サーバーはリクエストを取得し、画像を処理し、データベースを更新します(すべてかなり迅速です)

::サーバーは画像をbase64に変換し、文字列を返します

::アプリは画像を保存します

簡単ですよね?私が抱えている問題は、アプリが Wi-Fi 範囲に一時的に入り、応答を得る前にドロップアウトすることです。これは、イメージがデータベースにダウンロードされていないのに、データベースにダウンロードされていると言われることを意味します (このシステムの大きな問題)。

応答が確実に行われるようにする良い方法はありますか? イメージをダウンロードした後にアプリからのみ呼び出される、データベースを更新する 2 番目の Web メソッドを作成するための最良のオプションはありますか?

これらの呼び出しは、SOAP (ksoap2 インポート) を使用して行っています。

私が下す方法は良いですか、それとももっと良い方法がありますか?

CallSoap.java:

public String Call(String variable1)
{

    SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE,OPERATION_NAME);
    PropertyInfo pi=new PropertyInfo();
    pi.setName("variable1");
    pi.setValue(variable1);
    pi.setType(String.class);
    request.addProperty(pi);

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
    SoapEnvelope.VER11);
    envelope.dotNet = true;
    envelope.setOutputSoapObject(request);
    HttpTransportSE httpTransport = new HttpTransportSE(SOAP_ADDRESS);
    Object response=null;
    try

    {

        httpTransport.call(SOAP_ACTION, envelope);

        response = envelope.getResponse();

    }

    catch (Exception exception)

    {

        response=exception.toString();

    }


    return response.toString();
}

Caller.java

public class Caller  extends Thread 
{

public CallSoap cs;
public String variable1= "variable1";

public void run()
{
    try
    {
    cs=new CallSoap();  
    String resp=cs.Call(variable1);
    MySOAPCallActivity.rslt=resp;
    }catch(Exception ex)
    {
        MySOAPCallActivity.rslt=ex.toString();  
    }


}
}

メインクラス:

try{

                rslt="START";
                Caller c=new Caller();
                c.variable1=variable1;
                c.join();
                c.start();
                while(rslt=="START")
                {
                    try
                    {
                        Thread.sleep(10);
                    }
                    catch(Exception ex)
                    {
                    }
                }
            }
            catch(Exception ex){
            }
4

0 に答える 0