I have the following 3 classes and 1 interface in my project. Setting logging to NONE leads to "success", but with an empty response body (see below in getMovies () → success ()). The URL that appears in this error can be cut and pasted into the browser, and it works great. If I change the logging to FULL, everything works fine, however now my API key is clearly displayed on LogCat output.
public class RestClient {
private ApiService apiService;
public RestClient(String endpoint, boolean enableLogging) {
Gson gson = new GsonBuilder()
.registerTypeAdapterFactory(new ItemTypeAdapterFactory())
.setDateFormat("yyyy-MM-dd")
.setPrettyPrinting()
.excludeFieldsWithoutExposeAnnotation()
.create();
RestAdapter restAdapter = new RestAdapter.Builder()
.setLogLevel(BuildConfig.DEBUG && enableLogging ? RestAdapter.LogLevel.FULL : RestAdapter.LogLevel.NONE)
.setEndpoint(endpoint)
.setConverter(new GsonConverter(gson))
.setRequestInterceptor(new SessionRequestInterceptor())
.build();
apiService = restAdapter.create(ApiService.class);
}
public ApiService getApiService() {
return apiService;
}
}
public class ServiceEventHandler {
private boolean isRetrofitLoggingEnabled;
private String rottenTomatoesUrl;
private String rottenTomatoesApiKey;
public ServiceEventHandler(Context context) {
isRetrofitLoggingEnabled = Boolean.valueOf(context.getString(R.string.retrofit_logging_enabled));
rottenTomatoesUrl = context.getString(R.string.movies_url);
rottenTomatoesApiKey = context.getString(R.string.rotten_tomatoes_api_key);
if (rottenTomatoesApiKey.equals("REPLACE WITH YOUR KEY")) {
Toast.makeText(context, context.getString(R.string.error_replace_api_key), Toast.LENGTH_LONG).show();
}
}
@Subscribe
public void getMovies(final GetMoviesEvent event) {
ApiService apiService = new RestClient(rottenTomatoesUrl, isRetrofitLoggingEnabled).getApiService();
apiService.getMovies(rottenTomatoesApiKey, event.getPageNumber(), event.getPageLimit(), new RestCallback<Movies>(event.getCallNumber()) {
@Override
public void success(Movies movies, Response response) {
if (response.getBody().length() > 0) {
EventBus.post(movies);
} else {
EventBus.post(new APIErrorEvent(RetrofitError.unexpectedError(response.getUrl(), new HttpException("Empty Body")), event.getCallNumber()));
}
}
});
}
}
public abstract class RestCallback<T> implements Callback<T> {
private int callNumber;
public RestCallback(int callNumber) {
this.callNumber = callNumber;
}
@Override
public void failure(RetrofitError error) {
EventBus.post(new APIErrorEvent(error, this.callNumber));
}
public int getCallNumber() {
return callNumber;
}
}
public interface ApiService {
final static String APPSETTINGS = "/application_settings.json";
final static String MOVIES = "/in_theaters.json";
@GET(MOVIES)
void getMovies(@Query("apikey") String key, @Query("page") int page, @Query("page_limit") int page_limit, Callback<Movies> cb);
}
source
share