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){
}