我正在转向Retrofit并尝试理解使用异步回调的正确架构.
例如,我有一个界面:
interface RESTService{
@GET("/api/getusername")
void getUserName(@Query("user_id") String userId,
Callback<Response> callback);
}
Run Code Online (Sandbox Code Playgroud)
我从主要活动中运行这个:
RestAdapter restAdapter = new RestAdapter.Builder()
.setServer("WEBSITE_URL")
.build();
RESTService api = restAdapter.create(RESTService.class);
api.getUserName(userId, new Callback<Response> {...});
Run Code Online (Sandbox Code Playgroud)
然后用户旋转设备,我有新创建的活动......这里发生了什么?如何获得对新活动的响应(我假设api调用后台将比第一个活动生命执行更长时间).也许我必须使用静态回调实例或者什么?请告诉我正确的方法......
这是我在Interface中的方法.我正在调用此函数,但app崩溃时出现此异常:
引起:java.lang.IllegalArgumentException:服务方法不能返回void.方法RestInterface.getOtp
//post method to get otp for login
@FormUrlEncoded
@POST("/store_login")
void getOtp(@Header("YOUR_APIKEY") String apikey, @Header("YOUR_VERSION") String appversion,
@Header("YOUR_VERSION") String confiver, @Field("mobile") String number, Callback<Model> cb);
Run Code Online (Sandbox Code Playgroud)
这是我调用此函数的代码
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(API_URL)
.build();
RestInterface restApi = retrofit.create(RestInterface.class);
restApi.getOtp("andapikey", "1.0", "1.0", "45545845454", new Callback<Model>() {
@Override
public void onResponse(Response<Model> response) {
}
@Override
public void onFailure(Throwable t) {
}
});
Run Code Online (Sandbox Code Playgroud)