package com.airplayer.multitask; import android.os.AsyncTask; import android.util.Log; import com.airplayer.model.Picture; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; /** * Created by ZiyiTsang on 15/7/12. */ public abstract class DownloadURLTask extends AsyncTask<String, Void, ArrayList<Picture>> { private boolean isError; @Override protected ArrayList<Picture> doInBackground(String... params) { HttpURLConnection connection = null; try { String urlParam = params[0]; if (params[1] != null) urlParam = urlParam + params[1]; URL url = new URL(getUrl() + urlParam); connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setConnectTimeout(8000); connection.setReadTimeout(8000); BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream())); StringBuilder response = new StringBuilder(); String line; while ((line = br.readLine()) != null) { response.append(line); } return decodeJson(response.toString()); } catch (IOException e) { onError(e); isError = true; } finally { if (connection != null) { connection.disconnect(); } } return null; } @Override protected void onPostExecute(ArrayList<Picture> list) { if (isError) { isError = false; return; } onFinish(list); } public abstract String getUrl(); public abstract ArrayList<Picture> decodeJson(String response); public abstract void onError(Exception e); public abstract void onFinish(ArrayList<Picture> list); }