1

URL を取得するための Bolts タスクの実装を作成しました。

public class UrlFetcher {

    private static final String LOG_TAG = "UrlFetcher";

    public static Task<byte[]> getUrl(String url) {
        final TaskCompletionSource<byte[]> tcs = new TaskCompletionSource<>();
        try {
            tcs.setResult(downloadUrl(url));
        } catch (IOException e) {
            tcs.setError(e);
        }
        return tcs.getTask();
    }


    private static byte[] downloadUrl(String myurl) throws IOException {
        InputStream is = null;
        try {
            URL url = new URL(myurl);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setReadTimeout(10000 /* milliseconds */);
            conn.setConnectTimeout(15000 /* milliseconds */);
            conn.setRequestMethod("GET");
            conn.setDoInput(true);
            // Starts the query
            conn.connect();
            int response = conn.getResponseCode();
            Log.d(LOG_TAG, "The response is: " + response);
            is = conn.getInputStream();

            byte[] bytes = IOUtils.toByteArray(is);
            return bytes;
        } finally {
            if (is != null) {
                is.close();
            }
        }
    }

}

これは、実行する最初のタスクです。バックグラウンドエグゼキュータで実行するにはどうすればよいですか?

別のタスクが継続されている場合にのみ、エグゼキューターを指定できるようです。

4

1 に答える 1

3

TaskCompletionSource を使用する必要はありません。代わりに Task.callInBackground を使用してください。

public static Task<byte[]> getUrl(final String url) {
    return Task.callInBackground(new Callable<byte[]> {
        public byte[] call() {
            return downloadUrl(url);
        }
    });
}
于 2016-05-02T02:53:49.087 に答える