Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否将改装路径参数值映射到返回的对象?_Java_Android_Gson_Retrofit - Fatal编程技术网

Java 是否将改装路径参数值映射到返回的对象?

Java 是否将改装路径参数值映射到返回的对象?,java,android,gson,retrofit,Java,Android,Gson,Retrofit,我了解在定义API接口时如何使用Reformation的路径参数。例如: @GET("/users/{id}/profile") void getUserProfile(@Path("id") int userId, Callback<UserProfile> callback); @GET(“/users/{id}/profile”) void getUserProfile(@Path(“id”)int userId,回调); 我了解如何设置一个基本类,允许GSON自动将API

我了解在定义API接口时如何使用Reformation的路径参数。例如:

@GET("/users/{id}/profile")
void getUserProfile(@Path("id") int userId, Callback<UserProfile> callback);
@GET(“/users/{id}/profile”)
void getUserProfile(@Path(“id”)int userId,回调);
我了解如何设置一个基本类,允许GSON自动将API响应映射到我想要的类


我的问题是,改造是否支持类成员上的某种注释,当它执行GSON魔术时,这些注释将自动填充成员的路径值?在本例中,用户ID作为路径参数出现在URL路径中,但不在响应中,我希望将其分配给返回的对象。

我唯一的想法是解决问题,而不是回答:使用两个回调。一个在接口方法中定义并由调用者提供,另一个在某个帮助器类中调用RestAdapter生成的服务的本地回调。本地回调接收实际响应,分配缺少的值,并将完成的对象提供给调用方提供的回调?例如,类似这样的东西……但它似乎有点骇人听闻:

public void getUserProfile(final int userId, final Callback<UserProfile> callback)
    {
        Callback<UserProfile> cb = new Callback<UserProfile>()
        {
            @Override
            public void success(UserProfile userProfile, Response response)
            {
                userProfile.userId = userId;
                callback.success(userProfile, response);
            }

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

        myService.getUserProfile(userId, cb);
    }
public void getUserProfile(最终int用户标识,最终回调)
{
回调cb=新回调()
{
@凌驾
public void成功(UserProfile UserProfile,Response-Response)
{
userProfile.userId=userId;
callback.success(userProfile,response);
}
@凌驾
公共无效失败(错误)
{
回调失败(错误);
}
};
getUserProfile(userId,cb);
}

创建回调时,我会将请求信息粘贴到回调中。然后,当改型调用success或failure方法时,可以在success或failure方法中使用该信息

我使用Square的Otto事件总线进行改造,所以我的过程是这样的

  • 活动将事件对象“发布”到总线上。该事件对象 拥有所有改造所需的信息,以满足其网络请求
  • 另一个对象(在我的应用程序类中)订阅总线和 从总线接收请求事件时
  • 然后我调用我的改装api。作为其中的一部分,我创建了一个 回调对象。该回调对象必须实现成功 和失败的方法,但这不是它能做的全部。就我而言,我 在该回调对象中存储对Otto事件对象的引用
  • 当网络操作完成时,Reformation调用任一方法(成功或失败),并且对事件对象的引用(以及为Reformation提供的信息)可用
  • 在success方法中,我访问GSON转换的响应,然后使用setter在创建的对象中设置事件对象字段。请记住,您定义了GSON创建的对象,以便可以在其中包含您喜欢的任何字段或方法
  • 如果您不使用Otto,您仍然可以使用相同的过程,只需以相同的方式将希望传递给响应的信息放入回调中即可

    下面是从我的一个项目粘贴的一些代码,以演示我上面描述的内容

    @Subscribe
    public void onSignup(SignupRequest event) {
        MyLog.p(this,"inside api repo - making signup request");
        mRailsApi.signup(event, new RailsApiCallback<SignupRequest,SignupResponse>(mBus, event, new SignupResponse()));
    }
    
    @POST(API_URL + "/signup")
    void signup(@Body UserRequestParams requestParams,
            Callback<SignupResponse> tokenParms);
    
    
    public class RailsApiCallback<T,S extends BaseResponse> implements Callback<S> {
    private Bus mBus;
    private S mResponse;
    private T mRequestEvent;
    @Inject PersistData mPersistData;
    @Inject @ForApplication Context mContext;
    @Inject MyApp mMyApp;
    
    public RailsApiCallback(Bus bus, T requestEvent, S response) {
        super();
        mBus = bus;
        mResponse = response;    
        mRequestEvent = requestEvent;
        mResponse.setRequestEvent(requestEvent);
        Injector.getInstance().inject(this);
    }
    
    
    @Override
    public void success(S convertedResponse, Response rawResponse) {
        MyLog.p(this,String.format("response body = %s",rawResponse.getBody()));
        S response = convertedResponse != null ? convertedResponse : mResponse ;
        response.setSuccessful(true);
        response.setRawResponse(rawResponse);
        response.setRequestEvent(mRequestEvent);
        mBus.post(response);
    
    }
    
    @订阅
    注册时公共无效(注册请求事件){
    p(这是“api内部回购-签署申请”);
    mRailsApi.signup(event,new RailsApiCallback(mBus,event,new SignupResponse());
    }
    @帖子(API_URL+“/注册”)
    无效注册(@Body UserRequestParams requestParams,
    回调函数(PARMS);
    公共类RailsApiCallback实现回调{
    私家巴士小巴;
    私人秘书处的答复;
    私人捷运服务;
    @注入持久数据mPersistData;
    @注入@ForApplication上下文mContext;
    @注射MyApp-mMyApp;
    公共RailsApiCallback(总线、T请求事件、S响应){
    超级();
    mBus=公共汽车;
    mResponse=响应;
    mRequestEvent=requestEvent;
    mResponse.setRequestEvent(requestEvent);
    Injector.getInstance().Injector(这个);
    }
    @凌驾
    public void成功(S个convertedResponse、Response和Response){
    p(这是String.format(“响应体=%s”,rawResponse.getBody());
    S response=convertedResponse!=null?convertedResponse:mrresponse;
    response.setSuccessful(true);
    response.setRawResponse(rawResponse);
    response.setRequestEvent(mrrequestevent);
    小型企业单位员额(答复);
    }