【问题标题】:is it safe to use static inteface in application class?在应用程序类中使用静态接口是否安全?
【发布时间】:2020-05-10 22:16:57
【问题描述】:

使用这些类有问题吗? 这个静态接口会不会让应用类以后出问题?

public class App extends Application {
private static KareezAPI apiService;
private InternetConnectionListener mInternetConnectionListener;
public static final int DISK_CACHE_SIZE = 10 * 1024 * 1024; // 10 MB
public void setInternetConnectionListener(InternetConnectionListener listener) {
    mInternetConnectionListener = listener;
}

public void removeInternetConnectionListener() {
    mInternetConnectionListener = null;
}

public KareezAPI getApiService(Activity activity) {
    if (apiService == null) {
        apiService = provideRetrofit(KareezAPI.BASE_URL,activity).create(KareezAPI.class);
        }
    return apiService;
}
                                   }

这是界面:

public interface KareezAPI{
String BASE_URL="https://baseurl.heroapp.com/";
@POST("register")
Call<RegisterResponse> RegisterUser( @Body RegisterData registerData);

@POST("login")
Call<RegisterResponse> LoginUser(@Body LoginData loginData); public interface LoginUserCallback{
    public void onResponse(Call<RegisterResponse> call, Response<RegisterResponse> response);
    public void onFailure(Call<RegisterResponse> call, Throwable t);
}


}

这就是这个接口和app类的使用

((App) activity.getApplication()).getApiService(activity).LoginUser(loginData).enqueue(new 
                                               Callback<RegisterResponse>() {
        @Override
        public void onResponse(@NonNull Call<RegisterResponse> call, @NonNull 
             Response<RegisterResponse> response) {
            loginUserCallback.onResponse(call, response);
        }

        @Override
        public void onFailure(@NonNull Call<RegisterResponse> call, Throwable t) {
            loginUserCallback.onFailure(call, t);
        }
    });

【问题讨论】:

    标签: java android interface static


    【解决方案1】:

    对我来说,将 Api 逻辑添加到 Application 类是没有意义的。你可以做的是在你的KareezAPI 接口中使用Retrofit,并编写如下内容:

    Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    
    KareezAPI service = retrofit.create(KareezAPI.class);
    

    然后,当你想使用它时,写

    KareezAPI.service.LoginUser().enqueue()...
    

    随心所欲。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-21
      • 1970-01-01
      • 2011-02-03
      • 1970-01-01
      • 2019-01-28
      • 1970-01-01
      • 2011-09-24
      相关资源
      最近更新 更多