package com.loopj.android.http;
import android.util.Log;
import org.apache.http.Header;
import java.io.UnsupportedEncodingException;
/**
* Used to intercept and handle the responses from requests made using {@link AsyncHttpClient}. The
* {@link #onSuccess(int, org.apache.http.Header[], String)} method is designed to be anonymously
* overridden with your own response handling code. <p> </p> Additionally, you can override the
* {@link #onFailure(int, org.apache.http.Header[], String, Throwable)}, {@link #onStart()}, and
* {@link #onFinish()} methods as required. <p> </p> For example: <p> </p>
* <pre>
* AsyncHttpClient client = new AsyncHttpClient();
* client.get("http://www.google.com", new TextHttpResponseHandler() {
* @Override
* public void onStart() {
* // Initiated the request
* }
*
* @Override
* public void onSuccess(String responseBody) {
* // Successfully got a response
* }
*
* @Override
* public void onFailure(String responseBody, Throwable e) {
* // Response failed :(
* }
*
* @Override
* public void onFinish() {
* // Completed the request (either success or failure)
* }
* });
* </pre>
*/
public abstract class TextHttpResponseHandler extends AsyncHttpResponseHandler {
private static final String LOG_TAG = "TextHttpResponseHandler";
/**
* Creates new instance with default UTF-8 encoding
*/
public TextHttpResponseHandler() {
this(DEFAULT_CHARSET);
}
/**
* Creates new instance with given string encoding
*
* @param encoding String encoding, see {@link #setCharset(String)}
*/
public TextHttpResponseHandler(String encoding) {
super();
setCharset(encoding);
}
/**
* Called when request fails
*
* @param statusCode http response status line
* @param headers response headers if any
* @param responseString string response of given charset
* @param throwable throwable returned when processing request
*/
public abstract void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable);
/**
* Called when request succeeds
*
* @param statusCode http response status line
* @param headers response headers if any
* @param responseString string response of given charset
*/
public abstract void onSuccess(int statusCode, Header[] headers, String responseString);
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBytes) {
onSuccess(statusCode, headers, getResponseString(responseBytes, getCharset()));
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBytes, Throwable throwable) {
onFailure(statusCode, headers, getResponseString(responseBytes, getCharset()), throwable);
}
/**
* Attempts to encode response bytes as string of set encoding
*
* @param charset charset to create string with
* @param stringBytes response bytes
* @return String of set encoding or null
*/
public static String getResponseString(byte[] stringBytes, String charset) {
try {
return stringBytes == null ? null : new String(stringBytes, charset);
} catch (UnsupportedEncodingException e) {
Log.e(LOG_TAG, "Encoding response into string failed", e);
return null;
}
}
}