Java 如何处理翻新RestAdapter.Builder()异常?

Java 如何处理翻新RestAdapter.Builder()异常?,java,architecture,retrofit,Java,Architecture,Retrofit,我使用改型连接到用户可配置的URL,我遇到的问题是如何处理空白URL。正如预期的那样,当服务器为null/blank时,RestAdapter.Builder会抛出一个IllegalArgumentException,这意味着无法调用create来生成改型接口,给我留下一个null接口 例如,使用以下API接口 interface IApiService { @POST("/{path}/api/{userid}/calls/Action") void start

我使用改型连接到用户可配置的URL,我遇到的问题是如何处理空白URL。正如预期的那样,当服务器为null/blank时,RestAdapter.Builder会抛出一个IllegalArgumentException,这意味着无法调用create来生成改型接口,给我留下一个null接口

例如,使用以下API接口

interface IApiService {
        @POST("/{path}/api/{userid}/calls/Action")
        void startCall(@Path("path") String path, @Path("userid") String userid, @Body Action action, Callback<Response> callback);

        @PUT("/{path}/api/{userid}/calls/Action")
        void addToCall(@Path("path") String path, @Path("userid") String userid, @Body Action action, Callback<Response> callback);
} 
但这是不可能的,因为IApiService接口使用的是Regulation回调接口,该接口需要一个故障参数RegulationError

我列出的任何选项都可以吗?还是有更好的解决方案来处理无法生成接口的情况

我正在使用改型连接到用户可配置的URL

您应该立即验证并拒绝来自其来源的空白URL。你的应用程序永远不应该使用无效的URL构建
RestAdapter

立即拒绝的一个重要原因是避免掩盖问题。如果有不好的数据,它需要在被发现后立即浮出水面,而不是隐藏在拒绝API调用的接口的伪实现后面

public class ApiServiceWrapper implements IAPiServiceWrapper {

        private IApiService mAPiService;

        @Inject
        ApiServiceWrapper(Settings settings, RequestInterceptor requestInterceptor) {

            RestAdapter restAdapter = new RestAdapter.Builder()
                    .setServer(settings.getUrl())
                    .setRequestInterceptor(requestInterceptor)
                    .setConverter(new ActionConverter())
                    .build();

            mAPiService = restAdapter.create(IApiService.class);
        }

        public void startCall(String path, String userid, Action action, final IApiResultCallback<Response> callback) {
            mAPiService.startCall(path, userid, action, new Callback<Response>() {
                @Override
                public void success(Response response, Response response2) {
                    callback.success();
                }

                @Override
                public void failure(RetrofitError error) {
                    callback.failure(error.getResponse().getReason());
                }
            });
        }

        public void addToCall(String path, String userid, Action action, final IApiResultCallback<Response> callback) {
            mAPiService.addToCall(path, userid, action, new Callback<Response>() {
                @Override
                public void success(Response response, Response response2) {
                    callback.success();
                }

                @Override
                public void failure(RetrofitError error) {
                    callback.failure(error.getResponse().getReason());
                }
            });
        }
    }
public void startCall(String path, String userid, Action action, final IApiResultCallback<Response> callback) {
    if (mAPiService != null) {
        mAPiService.startCall(path, userid, action, new Callback<Response>() {
            @Override
            public void success(Response response, Response response2) {
                callback.success();
            }

            @Override
            public void failure(RetrofitError error) {
                callback.failure(error.getResponse().getReason());
            }
        });
    } else {
           callback.failure("Some reason here :D");
    }
}
@Inject
ApiServiceWrapper(Settings settings, RequestInterceptor requestInterceptor) {
        if (TextUtils.isEmpty(settings.getUrl())) {
            mAPiService = new InvalidSettingsApiService("some error")
        } else {
            RestAdapter restAdapter = new RestAdapter.Builder()
                    .setServer(settings.getUrl())
                    .setRequestInterceptor(requestInterceptor)
                    .setConverter(new ActionConverter())
                    .build();

            mAPiService = restAdapter.create(IApiService.class);
        }
}