改型回调用于根据参数执行其他操作

时间:2018-07-02 18:31:39

标签: java android retrofit

我从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();
            }
        });
    }

我希望你能理解我的英语不好,我想要什么,并且能够通过简单的例子给我一些想法。

谢谢

1 个答案:

答案 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) {