我从android开发和改造开始。 我的应用程序使用来自mysql / apache服务器的数据。翻新后一切正常。 但是,我想在应用程序中添加一个虚拟函数,其accountId == 0(因此无需登录),该函数使用应用程序中而不是服务器上的硬编码数据。
因此,我想修改该调用,如果accountID == 0并使用与翻新相同的调用返回相同类型的结果,则使用MY类/方法。
我尝试向您显示代码:
MyService.java
interface MyService {
@GET("get.php")
Call<List<MyObject>> getAll(@Query("a") int accountid);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Consts.URL_SERVER)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
MyCalls.java
public class MyCalls {
public interface CallbacksAll {
void onResponse(@Nullable List<MyObject> myobjetcs);
void onFailure();
}
public static void getAll(CallbacksAll callbacks, int accountId) {
final WeakReference<CallbacksAll> callbacksWeakReference = new WeakReference<>(callbacks);
///////////////////
// actually :
///////////////////
MyService myService = MyService.retrofit.create(MyService.class);
Call<List<MyObject>> call = myService.getAllByAccount(accountId);
///////////////////
// end actually
///////////////////
///////////////////
// what I'ld like
///////////////////
MyService myService;
Call<List<MyObject>> call;
if ( accountId > 0 ) {
myService = MyService.retrofit.create(MyService.class);
call = myService.getAll(accountId);
} else {
myService = ??? // I don't really know what to create and do here
call = MyClass.getAll(); // my class/method nevermind
}
///////////////////
// end what I'd like
///////////////////
///////////////////
// what I'd like to NOT change
///////////////////
call.enqueue(new Callback<List<MyObject>>() {
@Override
public void onResponse(@NonNull Call<List<MyObject>> call, @NonNull Response<List<MyObject>> response) {
if (callbacksWeakReference.get() != null)
callbacksWeakReference.get().onResponse(response.body());
}
@Override
public void onFailure(@NonNull Call<List<MyObject>> call, @NonNull Throwable t) {
if (callbacksWeakReference.get() != null) callbacksWeakReference.get().onFailure();
}
});
}
我希望你能理解我的英语不好,我想要什么,并且能够通过简单的例子给我一些想法。
谢谢
答案 0 :(得分:0)
没有足够的代表发表评论,所以我把解决方案放在这里。
尽管解决方案非常简单,却花费了很多时间。 我只需要添加:
if (accountId == 0) {
callbacks.onResponse(MyObject.getAll());
} else {
final WeakReference<CallbacksAll> callbacksWeakReference = new WeakReference<>(callbacks);
[...]
});
}
在
public static void getAll(CallbacksAll callbacks, int accountId) {