2

これがあまりにもぎこちないことを願っています。データを待っている間に電話/アプリ/ UIをロックしたくないので、非同期Webサービス呼び出しを実装しました....しかし、プログラムの実行を継続したくないため、現在実行していてクラッシュしています.

私のアプリはサービスからデータを要求し、サービスはxmlドキュメントを返します。サービスがドキュメントを生成している間、私のプログラムは実行を続け、コードがファイルを探しているセクションに到達するとクラッシュします...まだそこにはありません。

だから私は、このシナリオのためにJavaで人がどのように/何をするかを知る必要がありますか? C#では、何をすべきか知っています。非同期呼び出しのコードは次のとおりです。問題があれば指摘してください。

public class DataExchangeServiceClient
{
private static final String BASE_URL = "http://www.icyarmtesting.com/";

private static AsyncHttpClient client = new AsyncHttpClient();

public static void get(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) 
{
    client.get(getAbsoluteUrl(url), params, responseHandler);
}

public static void post(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) 
{
      client.post(getAbsoluteUrl(url), params, responseHandler);
  }

  private static String getAbsoluteUrl(String relativeUrl) 
  {
      return BASE_URL + relativeUrl;
  }

}

そして実装...はい、今のところハードコードされていることは知っています。

protected static boolean GetExerciseData() throws JSONException
{
    RequestParams params = new RequestParams();
    params.put("Action", "");
    params.put("ProgramID", "8008009");
    params.put("UserName", "joex");
    params.put("Password", "dude!");


    DataExchangeServiceClient.get("liftdataexchange.xamlx", params, new JsonHttpResponseHandler()
    {
        @Override
        public void onSuccess(JSONArray timeline)
        {
            try
            {
            JSONObject firstEvent = (JSONObject) timeline.get(0);
            String XML_DOC_String = firstEvent.getString("text");
            }
            catch(JSONException jse)
            {

            }
            //send it off to become a document
        }
    });

    return true;

}
4

1 に答える 1

0

あなたの問題にはさまざまな解決策があります。しかし、最良の方法は Android サービスを使用することです。私はあなたの選択肢をもう少し説明します。

私は、このトピック専用のライブラリーRoboSpiceの共著者です。これは、サービスを使用することが最善のアプローチである理由を説明するインフォグラフィックです。それが私たちが RoboSpice で行っていることであり、Web からのデータのダウンロードなど、長時間実行されるバックグラウンド タスクを実行するための最良の方法であると確信しています。

さらに、RoboSpice は、 Spring Androidモジュール、Google Http Java クライアントモジュール (またはRetrofit、間もなくリリース)などの REST 要求を実行するのに役立つさまざまなモジュールを提供します。

このライブラリに移行することをお勧めします。このライブラリは、バックグラウンド タスクの多くの複雑さを処理します。

于 2012-12-31T07:28:01.873 に答える