Skip to content

Commit 44a08c5

Browse files
ecgrebsarahcodes100
authored andcommitted
OkHttp3 & Retrofit2 (#55)
* Upgrades OkHttp to version 3.5.0 * Upgrades Retrofit to version 2.5.0 * Fix debug logging
1 parent e5cda24 commit 44a08c5

9 files changed

Lines changed: 317 additions & 104 deletions

File tree

build.gradle

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,10 @@ repositories {
8585
dependencies {
8686
compile 'com.android.support:appcompat-v7:22.2.1@aar'
8787
compile 'com.android.support:support-v4:22.2.1@aar'
88-
compile 'com.squareup.okhttp:okhttp:1.5.2'
89-
compile 'com.squareup.retrofit:retrofit:1.5.0'
88+
compile 'com.squareup.okhttp3:okhttp:3.5.0'
89+
compile 'com.squareup.okhttp3:logging-interceptor:3.5.0'
90+
compile 'com.squareup.retrofit2:retrofit:2.1.0'
91+
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
9092
compile 'javax.annotation:javax.annotation-api:1.2'
9193
compile 'com.github.frankiesardo:auto-parcel:0.3.1'
9294
apt 'com.github.frankiesardo:auto-parcel-processor:0.3.1'

gradle.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
version=1.0.1-SNAPSHOT
1+
version=1.1.0-SNAPSHOT
22

33
GROUP=com.mapzen.android
4-
VERSION_NAME=1.0.1-SNAPSHOT
4+
VERSION_NAME=1.1.0-SNAPSHOT
55

66
POM_ARTIFACT_ID=pelias-android-sdk
77

src/main/java/com/mapzen/pelias/Pelias.java

Lines changed: 39 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,25 @@
22

33
import com.mapzen.pelias.gson.Result;
44

5-
import retrofit.Callback;
6-
import retrofit.RequestInterceptor;
7-
import retrofit.RestAdapter;
5+
import okhttp3.OkHttpClient;
6+
import okhttp3.logging.HttpLoggingInterceptor;
7+
import retrofit2.Callback;
8+
import retrofit2.Retrofit;
9+
import retrofit2.converter.gson.GsonConverterFactory;
810

911
/**
1012
* Main class for interaction with Pelias.
1113
*/
1214
public class Pelias {
13-
public static final String DEFAULT_SEARCH_ENDPOINT = "https://search.mapzen.com/v1/";
15+
public static final String DEFAULT_SEARCH_ENDPOINT = "https://search.mapzen.com/";
1416

1517
private PeliasService service;
1618
private PeliasLocationProvider locationProvider;
1719
private PeliasRequestHandler requestHandler;
1820
private String endpoint = DEFAULT_SEARCH_ENDPOINT;
19-
private RestAdapter.LogLevel logLevel = RestAdapter.LogLevel.NONE;
20-
private RestAdapter restAdapter;
21+
private boolean debug = false;
22+
private Retrofit retrofit;
23+
private RequestInterceptor requestInterceptor;
2124

2225
/**
2326
* Constructs a {@link Pelias} object configured to use the default search endpoint for requests.
@@ -43,27 +46,26 @@ public Pelias(String url) {
4346
}
4447

4548
private void initService() {
46-
restAdapter = new RestAdapter.Builder()
47-
.setEndpoint(endpoint)
48-
.setLogLevel(logLevel)
49-
.setRequestInterceptor(new RequestInterceptor() {
50-
@Override public void intercept(RequestFacade request) {
51-
if (requestHandler != null) {
52-
if (requestHandler.headersForRequest() != null) {
53-
for (String key : requestHandler.headersForRequest().keySet()) {
54-
request.addHeader(key, requestHandler.headersForRequest().get(key));
55-
}
56-
}
57-
if (requestHandler.queryParamsForRequest() != null) {
58-
for (String key : requestHandler.queryParamsForRequest().keySet()) {
59-
request.addQueryParam(key, requestHandler.queryParamsForRequest().get(key));
60-
}
61-
}
62-
}
63-
}
64-
})
49+
requestInterceptor = new RequestInterceptor();
50+
if (requestHandler != null) {
51+
requestInterceptor.setRequestHandler(requestHandler);
52+
}
53+
54+
final OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder();
55+
clientBuilder.addNetworkInterceptor(requestInterceptor);
56+
57+
if (debug) {
58+
final HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
59+
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
60+
clientBuilder.addNetworkInterceptor(logging);
61+
}
62+
63+
retrofit = new Retrofit.Builder()
64+
.baseUrl(endpoint)
65+
.client(clientBuilder.build())
66+
.addConverterFactory(GsonConverterFactory.create())
6567
.build();
66-
this.service = restAdapter.create(PeliasService.class);
68+
this.service = retrofit.create(PeliasService.class);
6769
}
6870

6971
/**
@@ -72,6 +74,9 @@ private void initService() {
7274
*/
7375
public void setRequestHandler(PeliasRequestHandler handler) {
7476
requestHandler = handler;
77+
if (requestInterceptor != null) {
78+
requestInterceptor.setRequestHandler(handler);
79+
}
7580
}
7681

7782
/**
@@ -88,7 +93,7 @@ public void setEndpoint(String endpoint) {
8893
* @param debug
8994
*/
9095
public void setDebug(boolean debug) {
91-
this.logLevel = debug ? RestAdapter.LogLevel.FULL : RestAdapter.LogLevel.NONE;
96+
this.debug = debug;
9297
initService();
9398
}
9499

@@ -106,7 +111,7 @@ public void suggest(String query, Callback<Result> callback) {
106111
* point for results The callback will be notified upon success or failure of the query.
107112
*/
108113
public void suggest(String query, double lat, double lon, Callback<Result> callback) {
109-
service.getSuggest(query, lat, lon, callback);
114+
service.getSuggest(query, lat, lon).enqueue(callback);
110115
}
111116

112117
/**
@@ -124,8 +129,8 @@ public void search(String query, Callback<Result> callback) {
124129
* the query.
125130
*/
126131
public void search(String query, BoundingBox box, Callback<Result> callback) {
127-
service.getSearch(query, box.getMinLat(), box.getMinLon(), box.getMaxLat(), box.getMaxLon(),
128-
callback);
132+
service.getSearch(query, box.getMinLat(), box.getMinLon(), box.getMaxLat(), box.getMaxLon())
133+
.enqueue(callback);
129134
}
130135

131136
/**
@@ -134,23 +139,23 @@ public void search(String query, BoundingBox box, Callback<Result> callback) {
134139
* the query.
135140
*/
136141
public void search(String query, double lat, double lon, Callback<Result> callback) {
137-
service.getSearch(query, lat, lon, callback);
142+
service.getSearch(query, lat, lon).enqueue(callback);
138143
}
139144

140145
/**
141146
* Issues a reverse geocode request given the lat/lon. The callback will be notified upon success
142147
* or failure of the query.
143148
*/
144149
public void reverse(double lat, double lon, Callback<Result> callback) {
145-
service.getReverse(lat, lon, callback);
150+
service.getReverse(lat, lon).enqueue(callback);
146151
}
147152

148153
/**
149154
* Issues a place request for a given global identifier. The callback will be notified upon
150155
* success or failure of the query.
151156
*/
152157
public void place(String gid, Callback<Result> callback) {
153-
service.getPlace(gid, callback);
158+
service.getPlace(gid).enqueue(callback);
154159
}
155160

156161
/**
@@ -174,10 +179,6 @@ public String getEndpoint() {
174179
* @return
175180
*/
176181
public boolean getDebug() {
177-
if (restAdapter == null) {
178-
return false;
179-
}
180-
return (restAdapter.getLogLevel() == RestAdapter.LogLevel.FULL);
182+
return debug;
181183
}
182-
183184
}

src/main/java/com/mapzen/pelias/PeliasService.java

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
import com.mapzen.pelias.gson.Result;
44

5-
import retrofit.Callback;
6-
import retrofit.http.GET;
7-
import retrofit.http.Query;
5+
import retrofit2.Call;
6+
import retrofit2.http.GET;
7+
import retrofit2.http.Query;
88

99
/**
1010
* HTTP interface for {@link Pelias}.
@@ -14,33 +14,33 @@ public interface PeliasService {
1414
/**
1515
* Asynchronously request autocomplete results given a query and focus point.
1616
*/
17-
@GET("/autocomplete") void getSuggest(@Query("text") String query,
18-
@Query("focus.point.lat") double lat, @Query("focus.point.lon") double lon,
19-
Callback<Result> callback);
17+
@GET("/v1/autocomplete") Call<Result> getSuggest(@Query("text") String query,
18+
@Query("focus.point.lat") double lat, @Query("focus.point.lon") double lon);
2019

2120
/**
2221
* Asynchronously request search results given a query and bounding box.
2322
*/
24-
@GET("/search") void getSearch(@Query("text") String query,
23+
@GET("/v1/search") Call<Result> getSearch(@Query("text") String query,
2524
@Query("focus.viewport.min_lat") double minLat,
2625
@Query("focus.viewport.min_lon") double minLon,
2726
@Query("focus.viewport.max_lat") double maxLat,
28-
@Query("focus.viewport.max_lon") double maxLon, Callback<Result> callback);
27+
@Query("focus.viewport.max_lon") double maxLon);
2928

3029
/**
3130
* Asynchronously request search results given a query and focus point.
3231
*/
33-
@GET("/search") void getSearch(@Query("text") String query, @Query("focus.point.lat") double lat,
34-
@Query("focus.point.lon") double lon, Callback<Result> callback);
32+
@GET("/v1/search") Call<Result> getSearch(@Query("text") String query,
33+
@Query("focus.point.lat") double lat,
34+
@Query("focus.point.lon") double lon);
3535

3636
/**
3737
* Asynchronously issue reverse geocode request.
3838
*/
39-
@GET("/reverse") void getReverse(@Query("point.lat") double lat, @Query("point.lon") double lon,
40-
Callback<Result> callback);
39+
@GET("/v1/reverse") Call<Result> getReverse(@Query("point.lat") double lat,
40+
@Query("point.lon") double lon);
4141

4242
/**
4343
* Asynchronously request more information about places given their global unique identifiers.
4444
*/
45-
@GET("/place") void getPlace(@Query("ids") String ids, Callback<Result> callback);
45+
@GET("/v1/place") Call<Result> getPlace(@Query("ids") String ids);
4646
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package com.mapzen.pelias;
2+
3+
import java.io.IOException;
4+
import java.util.Map;
5+
6+
import okhttp3.HttpUrl;
7+
import okhttp3.Interceptor;
8+
import okhttp3.Request;
9+
import okhttp3.Response;
10+
11+
/**
12+
* OkHttp3 style network interceptor to append client headers and query params to outgoing requests.
13+
*/
14+
class RequestInterceptor implements Interceptor {
15+
private PeliasRequestHandler requestHandler;
16+
17+
/**
18+
* Intercepts outgoing requests and makes modifications if a {@link PeliasRequestHandler} is set.
19+
*/
20+
@Override public Response intercept(Chain chain) throws IOException {
21+
if (requestHandler != null) {
22+
return modifyRequest(chain);
23+
}
24+
25+
return chain.proceed(chain.request());
26+
}
27+
28+
/**
29+
* Modifies headers and query params for an outgoing request.
30+
*/
31+
private Response modifyRequest(Chain chain) throws IOException {
32+
final Request originalRequest = chain.request();
33+
final Request.Builder requestBuilder = originalRequest.newBuilder();
34+
addHeaders(requestBuilder);
35+
addQueryParams(requestBuilder, originalRequest);
36+
return chain.proceed(requestBuilder.build());
37+
}
38+
39+
/**
40+
* Add custom headers to outgoing request.
41+
*/
42+
private void addHeaders(Request.Builder requestBuilder) {
43+
final Map<String, String> headers = requestHandler.headersForRequest();
44+
if (headers != null) {
45+
for (String key : headers.keySet()) {
46+
requestBuilder.header(key, headers.get(key));
47+
}
48+
}
49+
}
50+
51+
/**
52+
* Add custom query params to outgoing request.
53+
*/
54+
private void addQueryParams(Request.Builder requestBuilder, Request originalRequest) {
55+
final Map<String, String> params = requestHandler.queryParamsForRequest();
56+
if (params != null) {
57+
for (String key : params.keySet()) {
58+
final HttpUrl url = originalRequest
59+
.url()
60+
.newBuilder()
61+
.addQueryParameter(key, params.get(key))
62+
.build();
63+
requestBuilder.url(url);
64+
}
65+
}
66+
}
67+
68+
void setRequestHandler(PeliasRequestHandler requestHandler) {
69+
this.requestHandler = requestHandler;
70+
}
71+
}

src/main/java/com/mapzen/pelias/widget/PeliasSearchView.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@
2727
import java.util.ArrayList;
2828
import java.util.List;
2929

30-
import retrofit.Callback;
31-
import retrofit.RetrofitError;
32-
import retrofit.client.Response;
30+
import retrofit2.Call;
31+
import retrofit2.Callback;
32+
import retrofit2.Response;
3333

3434
import static android.view.animation.AnimationUtils.loadAnimation;
3535

@@ -236,9 +236,9 @@ private void fetchAutoCompleteSuggestions(String text) {
236236
}
237237

238238
pelias.suggest(text, new Callback<Result>() {
239-
@Override public void success(Result result, Response response) {
239+
@Override public void onResponse(Call<Result> call, Response<Result> response) {
240240
final ArrayList<AutoCompleteItem> items = new ArrayList<>();
241-
final List<Feature> features = result.getFeatures();
241+
final List<Feature> features = response.body().getFeatures();
242242
for (Feature feature : features) {
243243
items.add(new AutoCompleteItem(SimpleFeature.fromFeature(feature)));
244244
}
@@ -253,8 +253,8 @@ private void fetchAutoCompleteSuggestions(String text) {
253253
adapter.notifyDataSetChanged();
254254
}
255255

256-
@Override public void failure(RetrofitError error) {
257-
Log.e(TAG, "Unable to fetch autocomplete results", error);
256+
@Override public void onFailure(Call<Result> call, Throwable t) {
257+
Log.e(TAG, "Unable to fetch autocomplete results", t);
258258
}
259259
});
260260
}
@@ -387,7 +387,7 @@ public void setAutoCompleteIconResourceId(int autoCompleteIconResourceId) {
387387
public class OnItemClickHandler {
388388

389389
/**
390-
* Returns a click listener to be used by the autcomplete list view. Listener handles setting
390+
* Returns a click listener to be used by the autocomplete list view. Listener handles setting
391391
* the search view's query, resetting the cursor position, clearing view focus, invoking the
392392
* callback and saving the search term.
393393
*/
@@ -409,7 +409,7 @@ public AdapterView.OnItemClickListener invoke() {
409409
features.add(item.getSimpleFeature().toFeature());
410410
result.setFeatures(features);
411411
if (callback != null) {
412-
callback.success(result, null);
412+
callback.onResponse(null, Response.success(result));
413413
}
414414
storeSavedSearch(item.getText(), item.getSimpleFeature().toParcel());
415415
}

0 commit comments

Comments
 (0)