package imgurapiexample.services; import imgurapiexample.Constants; import imgurapiexample.imgurmodel.ImageResponse; import imgurapiexample.imgurmodel.ImgurAPI; import imgurapiexample.imgurmodel.Upload; import java.io.IOException; import okhttp3.MediaType; import okhttp3.RequestBody; import retrofit2.Call; import retrofit2.Response; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; import rx.Observable; import rx.functions.Func0; /** * Created by AKiniyalocts on 1/12/15. * <p/> * Our upload service. This creates our Retrofit, uploads our image, and notifies us of the response. */ public class ImgurUpload { public Observable<ImageResponse> uploadImage(final Upload upload, final String clientId) { Func0<Observable<ImageResponse>> defer = new Func0<Observable<ImageResponse>>() { @Override public Observable<ImageResponse> call() { try { return getCall(upload, clientId); } catch (IOException e) { return Observable.error(e); } } }; return Observable.defer(defer); } private Observable<ImageResponse> getCall(Upload upload, String clientId) throws IOException { Retrofit restAdapter = buildRestAdapter(); // create RequestBody instance from file RequestBody requestFile = RequestBody.create(MediaType.parse("image/*"), upload.image); ImgurAPI imgurAPI = restAdapter.create(ImgurAPI.class); String clientAuth = Constants.getClientAuth(clientId); Call<ImageResponse> call = imgurAPI.postImage(clientAuth, requestFile); Response<ImageResponse> response = call.execute(); if (response.isSuccessful()) { return Observable.just(response.body()); } else { return Observable.error(new Exception(response.errorBody().string())); } } protected Retrofit buildRestAdapter() { return new Retrofit.Builder().addConverterFactory(GsonConverterFactory.create()).baseUrl(ImgurAPI.server).build(); } }