1
私はAndroidプロジェクトでネットワークタスクを達成するためにRetrofitライブラリを使用しました。私はRetrofitを使用するための効率的な方法が何であるか混乱しています。AndroidプロジェクトでRetrofitライブラリを使用する効率的な方法は何ですか?
私は1つがAPI.javaであり、他はRoute.javaで、私のプロジェクトでは2つのクラスを作成しました。
API.java
public class Api {
public static final String BASE_URL = "";
private static Api instance = new Api();
public static Api getInstance() {
return instance;
}
private Api(){}
public Retrofit getRetrofit() {
HttpLoggingInterceptor interceptor1 = new HttpLoggingInterceptor();
interceptor1.setLevel(HttpLoggingInterceptor.Level.BODY);
LogJsonInterceptor interceptor2 = new LogJsonInterceptor();
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(interceptor1).addInterceptor(interceptor2)
//.addInterceptor(interceptor1).addInterceptor(headerINterceptor)
.retryOnConnectionFailure(true)
.connectTimeout(15, TimeUnit.SECONDS)
.build();
// set gson converter lenient mode
Gson gson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd HH:mm:ss")
.setLenient()
.create();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.client(client)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
return retrofit;
}
public <S> S createService(Class<S> serviceClass) {
return getRetrofit().create(serviceClass);
}
}
Routes.java
public interface Routes {
/*-------------------------------------------------------------event -------------------------------------------------------*/
@GET("/events")
public Call<ApiResult<List<Event>>> getRecommendedEvents(@Query("start") int id, @Query("per_page") int count);
@POST("/event/new")
public Call<ApiResult<Event>> createEvent(@Body Event newEvent);
@POST("/published_event")
public Call<ApiResult<List<PublishedEventDetail>>> getPublishedEventDetail(@Query("user_id") int user_id, @Query("start") int id, @Query("per_page") int count);
/*-------------------------------------------------------- user -------------------------------------------------------*/
@POST("https://stackoverflow.com/users/new")
public Call<ApiResult<User>> createUser(@Body User user);
@POST("https://stackoverflow.com/users/login")
public Call<ApiResult<User>> login(@Body User user);
@POST("https://stackoverflow.com/users/update")
public Call<ApiResult<User>> update(@Body User user);
@POST("https://stackoverflow.com/users/new_guest")
public Call<ApiResult<User>> create_guest();
/*-------------------------------------------------------event registration -------------------------------------------------------*/
@POST("/event_registration/add")
public Call<ApiResult<UserEventDetail>> addEventRegistration(@Body UserEventDetail userEventDetail);
@GET("/event_registration/delete")
public Call<ApiResult<String>> deleteEventRegistration(@Query("user_id") int userId, @Query("event_id") int eventId);
@GET("/event_registration")
public Call<ApiResult<List<Event>>> getRegisteredEvents(@Query("user_id") int user_id, @Query("start") int id, @Query("per_page") int count);
@GET("/registered_user")
public Call<ApiResult<List<RegisteredUser>>> getRegisteredUsers(@Query("event_id") int user_id, @Query("start") int id, @Query("per_page") int count);
/*--------------------------------------------------------event view -------------------------------------------------------*/
@GET("/event_view")
public Call<ApiResult<List<Event>>> getViewedEvents(@Query("user_id") int user_id, @Query("start") int id, @Query("per_page") int count);
@POST("/event_view/add")
public Call<ApiResult<UserEventDetail>> addEventView(@Body UserEventDetail userEventDetail);
/*------------------------------------------------------ file upload/ download ---------------------------------------------------*/
@Multipart
@POST("uploadapp")
Call<ResponseBody> uploadAvatar(@Query("user_id") int user_id, @Part("description") String description, @Part("userfile\"; filename=\"avatar.png\"") RequestBody image);
@GET("avatar")
@Streaming
public Call<ResponseBody> getAvatarUrl(@Query("user_id") int user_id);
}
私はネットワークのタスクを達成するために必要がある場合、私はこれらのコードを使用します。
Routes api = Api.getInstance().createService(Routes.class);
Call<ApiResult<User>> call = api.createUser(user);
Response response = call.execute();
すべてのAPIをRoutesクラスに統合しても問題はありませんか?