首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将改造的回调从活动转移到类

如何将改造的回调从活动转移到类
EN

Stack Overflow用户
提问于 2015-05-10 06:42:29
回答 1查看 1.3K关注 0票数 3

我以前在活动中有我的createBottomBar()。由于活动跨越了4-5行,所以我将它移到一个单独的类中,但现在我不知道如何访问我的updateMap()。

updateMap代码是:

代码语言:javascript
复制
private void updateMap(String path) {
    RestAdapter restAdapter = new RestAdapter.Builder()
            .setEndpoint(API_URL)
            .build();

    MyService service = restAdapter.create(MyService.class);
    service.points(path, context);                
}

其中接口是:

代码语言:javascript
复制
public interface MyService {
@GET("/{point}")
void points(@Path("point") String path, MainActivity cb);
}

我应该在哪里/如何移动/更改更新的回调,这样我才能让它继续工作?

PS :我知道这更像是一个java问题,而不是一个android。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-10 07:11:40

用于回调的类必须实现Callback<T>接口。请参阅前面的更多信息,改装文档,这样回调不依赖于活动类,而是取决于回调接口的实现。因此,您可以将updateMap()方法放入您喜欢的任何类中,因为它不依赖于上下文。下面是一个简短的例子

所以您的界面可能如下所示

代码语言:javascript
复制
public interface MyService {
    @GET("/{point}")
    void points(@Path("point") String path, Callback<YourClassType>);
}

并且可以在匿名类中内联地定义回调实现。

代码语言:javascript
复制
MyService service = restAdapter.create(MyService.class);

service.points(path, new Callback<YourClassType>)() {
    @Override
    public void success(YourClassType foo, Response response)
    {
        // success
    }

    @Override
    public void failure(RetrofitError error) {
        // something went wrong
    }
});                

希望这能解决你的问题?

编辑:也请注意,每次你想要做一个请求时,你都不必重新创建Rest客户端。只做一次就够了。因此,也许可以为restclient定义一个类对象并重用它。

代码语言:javascript
复制
public class MyRestClientClass{
    //class context
    MyService mService;

    //helper method for service instantiation. call this method once
    void initializeRestClient()
    {
        RestAdapter restAdapter = new RestAdapter.Builder()
            .setEndpoint(API_URL)
            .build();
        mService = restAdapter.create(MyService.class);
    }

    //your service request method
    void updateMap()
    {
        mService.points(....)
    }
}

例如,在下面的活动中使用这个类是一个简短的虚拟代码。

代码语言:javascript
复制
MyRestClientClass mRestClientClass = new MyRestClientClass();

//instantiate the rest client inside
mRestClientClass.initializeRestClient();

//to call your updateMap for example after a button click 
yourButton.setOnClickListener(new OnClickListener() {
    //note that this works the same way as the Retrofit callback
    public void onClick(View v) {
        //call your web service
        mRestClientClass.updateMethod();
    }
});
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30148489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档