1

もちろん、クライアントがWebサービスの非同期を消費するために、C#からJava / Androidへの移行を少し保持する必要があるため、GUIがロックされません....(プログレスバーはケーキのアイシングになります。)C#でクライアントでこのようなことをするオブジェクトを作成します。

サービス参照を作成します。サービス インターフェイス メンバーに一致するオブジェクトを作成し、入力します。手順 2 で作成したサービス リクエスト パッシング オブジェクトを別のスレッドで起動します。プログレスバーが表示されるのを待ちます。エラーまたは戻りデータに関係なく、応答を処理します。

今は単純化しすぎているかもしれませんが、Java ではこのメソッドにかなり近いと思います。私が見ているのは、AsyncTask クラスを拡張するように言っている人がたくさんいることです。私が欠けているのは、クライアントから値を渡す方法ですか? たとえば、ユーザー名とパスワードを送信するにはどうすればよいですか? 残念ながら、さまざまな記事やニュアンスのすべてが私を混乱させています。仕事を成し遂げるための簡単な方法が必要です。

そのため、ヒント、ポインター、チュートリアル、またはその他の読書に感謝します。

JB

4

3 に答える 3

1

非同期タスクは、実行の進行中にホストされているアクティビティが破棄される可能性があるため、多くの問題を引き起こします。

最善のアプローチは、インテントサービス内またはサービス内でリクエストをホストすることです。これは、リクエストしているアクティビティの中で存続します。

すぐに使えるソリューションが必要な場合は、非常に成熟したプロジェクトであるrobospiceライブラリを確認することをお勧めします。これは、このGoogleIo2010の講演に基づいています

于 2012-12-30T13:44:18.100 に答える
1
public class AsyncHttpRequestManager extends AsyncTask<String, Boolean, String> {
    private final String serviceUrl = "URL HERE";
    String user;  
    String pass;

    public AsyncHttpRequestManager(String user, String Pass){
        this.user = user;  
        this.pass = pass;
    }

    @Override
    protected String doInBackground(String... params) {
        //execute the post
        return "";
    }

    protected void onPostExecute(String result) {
        Log.d("MESSAGE", result);
        //update the UI with the results
    }
}

そして、あなたは呼び出しを実行します

new AsyncHttpRequestManager(user, pass).execute();
于 2012-12-30T13:51:47.637 に答える
0

6 か月前、C#/.NET のバックグラウンドを持つ Android 開発を開始しました。

現在使用している最初のオプションは、非同期タスクを実行するためのAsyncTaskです...この場合は Web サービスを消費しています...

サンプルコードは

public class AsyncHttpRequestManager extends AsyncTask<String, Boolean, String> {
    private final String serviceUrl = "URL HERE";

    @Override
    protected String doInBackground(String... params) {
        try {
        DefaultHttpClient client = new DefaultHttpClient();
        HttpPut putRequest = new HttpPut(serviceUrl);
        putRequest.setHeader("Content-type", "text/plain");
        putRequest.setHeader("Accept", "text/plain");
            putRequest.setEntity(new StringEntity(params[0]));
            HttpResponse response = client.execute(putRequest);
            InputStream content = response.getEntity().getContent();
        BufferedReader buffer = new BufferedReader(new InputStreamReader(content));
        String result = "";
        String s = "";
        while ((s = buffer.readLine()) != null) {
            result += s;
        }
        return result;

        } 
        catch (UnsupportedEncodingException e) {
            Log.e("AsyncOperationFailed", e.getMessage());
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            Log.e("AsyncOperationFailed", e.getMessage());
            e.printStackTrace();
        } catch (IOException e) {
            Log.e("AsyncOperationFailed", e.getMessage());
            e.printStackTrace();
        }
        return null;
    }

    protected void onPostExecute(String result) {
        Log.d("MESSAGE", result);
    }
}

これについてブログ記事を書きました。

さらに、進行状況/読み込みダイアログを表示するには、AsyncTask で onPreExecute および onPostExecute メソッドをオーバーライドする必要がある場合があります。ドキュメントを確認してください。

2つ目の方法は、Apache の HttpClient ライブラリの上に構築された Android 用の非同期コールバック ベースの Http クライアントであるloopj ライブラリを使用することです。

loopj を利用したコード例は次のとおりです。

AsyncHttpClient client = new AsyncHttpClient();
client.setBasicAuth("username","password/token");
client.get("http://www.example.com", new AsyncHttpResponseHandler() {
    @Override
    public void onSuccess(String response) {
        System.out.println(response);
    }
});

時間の経過とともに、HttpClient を介してヘルパーを作成したため、最初のステップをすばやく上るのに本当に役立つ loopj などのオープン ソース ライブラリを使用することをお勧めします。唯一の課題は、別のプラットフォームから来たときに、単純な AsyncTask ではなく、他のライブラリで最初の課題に直面する可能性があることですが、柔軟性があれば時間を費やす価値があります。

于 2012-12-30T13:29:24.283 に答える