gpt4 book ai didi

java - 如何将改造的回调从 Activity 移动到类

转载 作者:太空狗 更新时间:2023-10-29 12:39:14 24 4
gpt4 key购买 nike

我曾经在 Activity 中使用 createBottomBar()。由于 Activity 通过了 4-5 百行代码,我将它移到了一个单独的类中,但现在我不知道如何访问我的 updateMap()。

updateMap代码是:

private void updateMap(String path) {
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(API_URL)
.build();

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

接口(interface)在哪里:

public interface MyService {
@GET("/{point}")
void points(@Path("point") String path, MainActivity cb);
}

我应该在哪里/如何移动/更改改造的回调,以便让它继续工作?

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

最佳答案

用于回调的类必须实现 Callback<T>界面。有关更多信息,请参阅此处 Retrofit doc所以 Callback 不依赖于 Activity 类,而是依赖于回调接口(interface)的实现。所以你可以把你的 updateMap()您喜欢的任何类中的方法,因为它不依赖于上下文。请参阅下面的简短示例

所以你的界面可能是这样的

public interface MyService {
@GET("/{point}")
void points(@Path("point") String path, Callback<YourClassType>);
}

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

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 Client。这样做一次就足够了。因此,也许为您的 restclient 定义一个类对象并重用它。

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(....)
}
}

要使用这个类,例如在下面的一个 Activity 中是一个简短的伪代码

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

关于java - 如何将改造的回调从 Activity 移动到类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30148489/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com