package com.pyj.http; import java.io.IOException; import org.apache.http.HttpEntity; import org.apache.http.ParseException; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.protocol.HttpContext; import org.apache.http.util.EntityUtils; import android.content.Context; import android.os.Message; public abstract class SyncHttpClient extends AsyncHttpClient { private int responseCode; /* * as this is a synchronous request this is just a helping mechanism to pass * the result back to this method. Therefore the result object has to be a * field to be accessible */ protected String result; protected AsyncHttpResponseHandler responseHandler = new AsyncHttpResponseHandler() { @Override void sendResponseMessage(org.apache.http.HttpResponse response,int reqType) { responseCode = response.getStatusLine().getStatusCode(); super.sendResponseMessage(response,reqType); }; @Override protected void sendMessage(Message msg) { /* * Dont use the handler and send it directly to the analysis * (because its all the same thread) */ handleMessage(msg); } @Override public void onSuccess(String content,int reqType) { result =content; } @Override public void onFailure(Throwable error, String content,int reqType) { result = onRequestFailed(error, content); } }; /** * @return the response code for the last request, might be usefull * sometimes */ public int getResponseCode() { return responseCode; } // Private stuff @Override protected void sendRequest(DefaultHttpClient client, HttpContext httpContext, HttpUriRequest uriRequest, String contentType, AsyncHttpResponseHandler responseHandler, Context context) { if (contentType != null) { uriRequest.addHeader("Content-Type", contentType); } /* * will execute the request directly */ new AsyncHttpRequest(client, httpContext, uriRequest, responseHandler) .run(); } public abstract String onRequestFailed(Throwable error, String content); public void delete(String url, RequestParams queryParams, AsyncHttpResponseHandler responseHandler) { // TODO what about query params?? delete(url, responseHandler); } public String get(String url, RequestParams params) { this.get(url, params, responseHandler); /* * the response handler will have set the result when this line is * reached */ return result; } public String get(String url) { this.get(url, null, responseHandler); return result; } public String put(String url, RequestParams params) { this.put(url, params, responseHandler); return result; } public String put(String url) { this.put(url, null, responseHandler); return result; } public String post(String url, RequestParams params) { this.post(url, params, responseHandler); return result; } public String post(String url) { this.post(url, null, responseHandler); return result; } public String delete(String url, RequestParams params) { this.delete(url, params, responseHandler); return result; } public String delete(String url) { this.delete(url, null, responseHandler); return result; } }