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

标签 java android retrofit

我曾经在 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/

相关文章:

java - Gluon Connect 在使用 Charm 依赖项进行 POST 时返回 NPE > 4.3.3

android - 如何使recyclerview显示所有项目并且无法滚动

android - 如何使用 AudioManager.STREAM_VOICE_CALL 更改通话音量

android - 如何发布 JSON 但使用 Retrofit 获取 XML 响应?

java - Objective-C 的 NSDictionary 的 Java 等价物是什么?

java - 如何防止 JavaFX 中的窗口太小?

java - 从 C 客户端到 Java 服务器的 Http Post 字符串给出错误 400 Bad Request

android - 当数据超过1个时,recyclerview仅更改1个图标(收藏夹图标)

android-studio - OkHttp:<-- HTTP 失败:java.net.UnknownServiceException:网络安全策略不允许与 10.0.2.2 的 CLEARTEXT 通信

android - Retrofit2 将图像发布为 base64