Created
March 14, 2012 15:03
-
-
Save lukaspili/2037075 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.supinfo.dondusang.task; | |
import android.os.AsyncTask; | |
import android.util.Log; | |
import com.google.gson.Gson; | |
import com.supinfo.dondusang.helper.UrlHelper; | |
import com.supinfo.dondusang.model.gift.Center; | |
import com.supinfo.dondusang.model.gift.CenterMapUrl; | |
import com.supinfo.dondusang.model.gift.CenterResult; | |
import org.apache.commons.io.IOUtils; | |
import java.io.BufferedReader; | |
import java.io.IOException; | |
import java.io.InputStreamReader; | |
import java.net.HttpURLConnection; | |
import java.net.URL; | |
import java.util.List; | |
/** | |
* @author Lukasz Piliszczuk <lukasz.pili AT gmail.com> | |
*/ | |
public class CenterLocationTask extends AsyncTask<Void, Void, List<Center>> { | |
private CenterMapUrl centerMapUrl; | |
private Gson gson; | |
private Listener listener; | |
public CenterLocationTask(CenterMapUrl centerMapUrl, Gson gson, Listener listener) { | |
this.centerMapUrl = centerMapUrl; | |
this.gson = gson; | |
this.listener = listener; | |
} | |
@Override | |
protected void onPreExecute() { | |
listener.onStart(); | |
} | |
@Override | |
protected List<Center> doInBackground(Void... voids) { | |
URL url = UrlHelper.getUrl(centerMapUrl.getUrl()); | |
CenterResult centerResult = null; | |
BufferedReader bufferedReader = null; | |
HttpURLConnection urlConnection = null; | |
try { | |
urlConnection = (HttpURLConnection) url.openConnection(); | |
urlConnection.setConnectTimeout(15 * 1000); | |
Log.d(getClass().getName(), "Connection opened to : " + centerMapUrl.getUrl()); | |
long time = System.currentTimeMillis(); | |
bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); | |
centerResult = gson.fromJson(bufferedReader, CenterResult.class); | |
Log.d(getClass().getName(), "Content downloaded and parsed in " + (System.currentTimeMillis() - time) + " ms"); | |
} catch (IOException e) { | |
Log.w(getClass().getName(), "Error during reading connection stream", e); | |
return null; | |
} finally { | |
IOUtils.closeQuietly(bufferedReader); | |
if (null != urlConnection) { | |
urlConnection.disconnect(); | |
} | |
} | |
if (null == centerResult) { | |
return null; | |
} | |
return centerResult.getCenters(); | |
} | |
@Override | |
protected void onPostExecute(List<Center> centers) { | |
if (null == centers) { | |
listener.onFailure(); | |
} else { | |
listener.onSuccess(centers); | |
} | |
listener.onStop(); | |
} | |
@Override | |
protected void onCancelled(List<Center> centers) { | |
Log.d(getClass().getName(), "Task cancelled"); | |
listener.onStop(); | |
} | |
public interface Listener { | |
void onSuccess(List<Center> centers); | |
void onFailure(); | |
void onStart(); | |
void onStop(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment