gpt4 book ai didi

android - Rx 和改造 : Changing ServiceApi request parameter in request loop started by repeatwhen or repeatuntill

转载 作者:太空狗 更新时间:2023-10-29 16:12:40 25 4
gpt4 key购买 nike

我正在为我的应用程序使用改造和 RxJava。我正在执行一个请求,该请求将每 1 秒发送一次服务器。为此,我创建了带有请求参数的改造服务 API 并订阅返回的可观察对象并使用 repeatWhen。

问题是,每次请求被命中时,我都想更改随请求发送的请求参数(基本上必须使其成为动态的)。我怎样才能做到这一点?

例如用例:sendLocation Api 每 10 秒向服务器发送一次当前位置。如何使用改造和 RxJava 实现这一目标

最佳答案

如果您添加延迟,@TassosBassoukos 的回答就有效。具体来说,这是一个使用 github API 的完整示例,可以在两个用户之间交替调用。确保不要让它运行太久——

public interface GitHubService {
@GET("/users/{user}/repos")
Observable<String> getRepo(@Path("user") String user);
}

static String[] users = {"octocat", "square"};
static int i = 0;

static String getUser() {
return users[i++ % 2];
}

public void RxGitRepo() {
OkHttpClient client = new OkHttpClient();

Retrofit retrofit = new Retrofit.Builder()
.client(client)
.baseUrl("https://api.github.com")
.addConverterFactory(ScalarsConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();

GitHubService gitHubService = retrofit.create(GitHubService.class);
Observable
.defer(() -> Observable.just(getUser()))
.flatMap(user -> gitHubService.getRepo(user))
.repeatWhen(done -> done.delay(2, TimeUnit.SECONDS))
.subscribeOn(Schedulers.io())
.subscribe(System.out::println);
}

对于您的用例,您可以在该位置上设置您的可观察对象并使用它来触发更新,而不是每 10 秒轮询一次该位置。使用类似 android-reactiveLocation 的库,您可以获得流式传输位置的 Observable。以下未经测试的代码——

LocationRequest request = LocationRequest.create() 
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
.setInterval(10000);

ReactiveLocationProvider locationProvider = new ReactiveLocationProvider(context);
Subscription subscription = locationProvider.getUpdatedLocation(request)
.sample(10, TimeUnits.SECONDS)
.flatMap(/* your retrofit call based on the observed location */)
.subscribe(/* subsciber for retrofit call results */);

关于android - Rx 和改造 : Changing ServiceApi request parameter in request loop started by repeatwhen or repeatuntill,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41098847/

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