Skip to content

Commit 2632edc

Browse files
committed
Removed Singleton pattern, for HttpClient would have to be instantiated re/configured on each request, migrated over older pattern of creating AsyncHttpRequest instance in subclass
1 parent 7835ec3 commit 2632edc

File tree

4 files changed

+45
-58
lines changed

4 files changed

+45
-58
lines changed

library/src/main/java/com/loopj/android/http/AsyncHttpClient.java

Lines changed: 20 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
package com.loopj.android.http;
2020

21-
import com.loopj.android.http.impl.AsyncHttpClientOptions;
2221
import com.loopj.android.http.interfaces.AsyncHttpClientInterface;
2322
import com.loopj.android.http.interfaces.AsyncHttpClientOptionsInterface;
2423
import com.loopj.android.http.interfaces.AsyncHttpRequestInterface;
@@ -44,29 +43,12 @@ public class AsyncHttpClient implements AsyncHttpClientInterface {
4443

4544
public static final String LOG_TAG = "AsyncHttpClient";
4645

47-
private volatile static AsyncHttpClient INSTANCE;
48-
4946
private final HttpClient httpClient;
5047
private RequestOptionsInterface defaultRequestOptions;
5148
private ExecutorService threadPool;
5249
private Class<? extends AsyncHttpRequestInterface> requestClass;
5350

54-
public static AsyncHttpClient getInstance() {
55-
return getInstance(new AsyncHttpClientOptions());
56-
}
57-
58-
public static AsyncHttpClient getInstance(AsyncHttpClientOptionsInterface options) {
59-
if (INSTANCE == null) {
60-
synchronized (AsyncHttpClient.class) {
61-
if (INSTANCE == null) {
62-
INSTANCE = new AsyncHttpClient(options);
63-
}
64-
}
65-
}
66-
return INSTANCE;
67-
}
68-
69-
private AsyncHttpClient(AsyncHttpClientOptionsInterface options) {
51+
public AsyncHttpClient(AsyncHttpClientOptionsInterface options) {
7052
httpClient = options.getHttpClient();
7153
defaultRequestOptions = options.getDefaultRequestOptions();
7254
threadPool = options.getThreadPool();
@@ -101,6 +83,21 @@ public ExecutorService getUsedThreadPool() {
10183
return threadPool;
10284
}
10385

86+
@Override
87+
public AsyncHttpRequestInterface getConfiguredAsyncHttpRequest(HttpUriRequest request, RequestOptionsInterface requestOptionsInterface, ResponseHandlerInterface responseHandlerInterface) {
88+
AsyncHttpRequestInterface asyncRequest;
89+
try {
90+
asyncRequest = requestClass.newInstance();
91+
} catch (Exception e) {
92+
Logger.e(LOG_TAG, "getConfiguredAsyncHttpRequest", e);
93+
return null;
94+
}
95+
asyncRequest.setHttpClient(this.httpClient);
96+
asyncRequest.setHttpRequest(request);
97+
asyncRequest.setResponseHandler(responseHandlerInterface);
98+
return asyncRequest;
99+
}
100+
104101
@Override
105102
public RequestHandleInterface get(String targetEndpoint, RequestParamsInterface requestParamsInterface, RequestOptionsInterface requestOptionsInterface, ResponseHandlerInterface responseHandlerInterface) {
106103
HttpGetHC4 uriRequest = new HttpGetHC4(targetEndpoint);
@@ -151,16 +148,9 @@ public RequestHandleInterface patch(String targetEndpoint, RequestParamsInterfac
151148

152149
@Override
153150
public RequestHandleInterface executeRawRequest(HttpUriRequest request, RequestOptionsInterface requestOptionsInterface, ResponseHandlerInterface responseHandlerInterface) {
154-
try {
155-
AsyncHttpRequestInterface asyncRequest = requestClass.newInstance();
156-
asyncRequest.setHttpClient(this.httpClient);
157-
asyncRequest.setHttpRequest(request);
158-
asyncRequest.setResponseHandler(responseHandlerInterface);
159-
threadPool.submit(asyncRequest);
160-
return new RequestHandle(asyncRequest);
161-
} catch (Exception e) {
162-
Logger.e(LOG_TAG, "executeRawRequest failed with exception", e);
163-
}
164-
return null;
151+
AsyncHttpRequestInterface asyncRequest = getConfiguredAsyncHttpRequest(request, requestOptionsInterface, responseHandlerInterface);
152+
threadPool.submit(asyncRequest);
153+
return new RequestHandle(asyncRequest);
165154
}
155+
166156
}

library/src/main/java/com/loopj/android/http/interfaces/AsyncHttpClientInterface.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ AsyncHttpClientInterface setDefaultRequestOptions(
1818

1919
ExecutorService getUsedThreadPool();
2020

21+
AsyncHttpRequestInterface getConfiguredAsyncHttpRequest(HttpUriRequest request, RequestOptionsInterface requestOptionsInterface, ResponseHandlerInterface responseHandlerInterface);
22+
2123
// HTTP methods
2224

2325
RequestHandleInterface get(

sample/src/main/java/com/loopj/android/http/sample/SampleInterface.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import com.loopj.android.http.RequestHandle;
2525
import com.loopj.android.http.interfaces.AsyncHttpClientInterface;
2626
import com.loopj.android.http.interfaces.RequestHandleInterface;
27+
import com.loopj.android.http.interfaces.RequestOptionsInterface;
2728
import com.loopj.android.http.interfaces.ResponseHandlerInterface;
2829

2930
import org.apache.http.Header;
@@ -54,7 +55,7 @@ public interface SampleInterface {
5455

5556
void setAsyncHttpClient(AsyncHttpClientInterface client);
5657

57-
AsyncHttpRequest getHttpRequest(HttpClient client, HttpContext httpContext, HttpUriRequest uriRequest, String contentType, ResponseHandlerInterface responseHandler, Context context);
58+
AsyncHttpRequest getHttpRequest(HttpUriRequest request, RequestOptionsInterface requestOptionsInterface, ResponseHandlerInterface responseHandlerInterface);
5859

5960
ResponseHandlerInterface getResponseHandler();
6061

sample/src/main/java/com/loopj/android/http/sample/SampleParentActivity.java

Lines changed: 21 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020

2121
import android.annotation.TargetApi;
2222
import android.app.Activity;
23-
import android.content.Context;
2423
import android.graphics.Color;
2524
import android.os.Build;
2625
import android.os.Bundle;
@@ -36,21 +35,19 @@
3635

3736
import com.loopj.android.http.AsyncHttpClient;
3837
import com.loopj.android.http.AsyncHttpRequest;
39-
import com.loopj.android.http.RequestHandle;
4038
import com.loopj.android.http.impl.AsyncHttpClientOptions;
4139
import com.loopj.android.http.impl.AsyncHttpRequestOptions;
4240
import com.loopj.android.http.interfaces.AsyncHttpClientInterface;
41+
import com.loopj.android.http.interfaces.AsyncHttpRequestInterface;
4342
import com.loopj.android.http.interfaces.RequestHandleInterface;
43+
import com.loopj.android.http.interfaces.RequestOptionsInterface;
4444
import com.loopj.android.http.interfaces.ResponseHandlerInterface;
4545

4646
import org.apache.http.Header;
4747
import org.apache.http.HttpEntity;
48-
import org.apache.http.client.HttpClient;
4948
import org.apache.http.client.methods.HttpUriRequest;
5049
import org.apache.http.entity.StringEntity;
51-
import org.apache.http.impl.client.DefaultHttpClient;
5250
import org.apache.http.message.BasicHeader;
53-
import org.apache.http.protocol.HttpContext;
5451

5552
import java.io.PrintWriter;
5653
import java.io.StringWriter;
@@ -62,28 +59,25 @@
6259

6360
public abstract class SampleParentActivity extends Activity implements SampleInterface {
6461

65-
private AsyncHttpClientInterface asyncHttpClient = AsyncHttpClient.getInstance(
62+
private AsyncHttpClientInterface asyncHttpClient = new AsyncHttpClient(
6663
new AsyncHttpClientOptions()
67-
.setDefaultRequestOptions(
68-
new AsyncHttpRequestOptions()
69-
.setConnectTimeout(5000)
70-
.setGzipSupportEnabled(true)
71-
.setHttpPort(80)
72-
.setHttpsPort(443)
73-
)
74-
.enableLogging()
75-
.setLoggingVerbosity(Log.VERBOSE)
76-
);
77-
// private AsyncHttpClient asyncHttpClient = new AsyncHttpClient() {
78-
//
79-
// @Override
80-
// protected AsyncHttpRequest newAsyncHttpRequest(DefaultHttpClient client, HttpContext httpContext, HttpUriRequest uriRequest, String contentType, ResponseHandlerInterface responseHandler, Context context) {
81-
// AsyncHttpRequest httpRequest = getHttpRequest(client, httpContext, uriRequest, contentType, responseHandler, context);
82-
// return httpRequest == null
83-
// ? super.newAsyncHttpRequest(client, httpContext, uriRequest, contentType, responseHandler, context)
84-
// : httpRequest;
85-
// }
86-
// };
64+
.setDefaultRequestOptions(
65+
new AsyncHttpRequestOptions()
66+
.setConnectTimeout(5000)
67+
.setGzipSupportEnabled(true)
68+
.setHttpPort(80)
69+
.setHttpsPort(443)
70+
)
71+
.enableLogging()
72+
.setLoggingVerbosity(Log.VERBOSE)
73+
) {
74+
@Override
75+
public AsyncHttpRequestInterface getConfiguredAsyncHttpRequest(HttpUriRequest request, RequestOptionsInterface requestOptionsInterface, ResponseHandlerInterface responseHandlerInterface) {
76+
AsyncHttpRequestInterface customRequest = getHttpRequest(request, requestOptionsInterface, responseHandlerInterface);
77+
return customRequest == null ? super.getConfiguredAsyncHttpRequest(request, requestOptionsInterface, responseHandlerInterface) : customRequest;
78+
}
79+
};
80+
8781
private EditText urlEditText, headersEditText, bodyEditText;
8882
private LinearLayout responseLayout;
8983
public LinearLayout customFieldsLayout;
@@ -174,7 +168,7 @@ public boolean onOptionsItemSelected(MenuItem item) {
174168
}
175169

176170
@Override
177-
public AsyncHttpRequest getHttpRequest(HttpClient client, HttpContext httpContext, HttpUriRequest uriRequest, String contentType, ResponseHandlerInterface responseHandler, Context context) {
171+
public AsyncHttpRequest getHttpRequest(HttpUriRequest request, RequestOptionsInterface requestOptionsInterface, ResponseHandlerInterface responseHandlerInterface) {
178172
return null;
179173
}
180174

0 commit comments

Comments
 (0)