Android 安卓:从Rx安卓改型返回
我有一个类方法返回Observable。可观察对象包含传递给post方法所需的授权密钥。我能够从一个类返回值,但不能在另一个类中及时捕获它。我正在阅读,人们使用了observate.blocking.first来阻止当前线程,这不是一个好方法。任何人都知道如何在另一节课上抓住它。这是我的密码: 可观察的类返回:Android 安卓:从Rx安卓改型返回,android,retrofit,retrofit2,rx-android,Android,Retrofit,Retrofit2,Rx Android,我有一个类方法返回Observable。可观察对象包含传递给post方法所需的授权密钥。我能够从一个类返回值,但不能在另一个类中及时捕获它。我正在阅读,人们使用了observate.blocking.first来阻止当前线程,这不是一个好方法。任何人都知道如何在另一节课上抓住它。这是我的密码: 可观察的类返回: public class GetAuthenticationToken { String authentication_token; Retrofit retr
public class GetAuthenticationToken {
String authentication_token;
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://abc.def.com/")
.addConverterFactory(ScalarsConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
GetTokenInterface service = retrofit.create(GetTokenInterface.class);
Observable<String> response_call = service.getToken1(setAPI_KEY, getaccesstoken);
String savedToken;
@CheckResult
public Observable<String> getToken() {
return service.getToken1(setAPI_KEY, getaccesstoken)
.subscribeOn(Schedulers.newThread())
.doOnNext(new Action1<String>() {
public void call(String token) {
savedToken = token;
}
})
.observeOn(AndroidSchedulers.mainThread());
}
public String getSavedToken() {
return savedToken;
}
}
公共类GetAuthenticationToken{
字符串认证令牌;
改装改装=新改装.Builder()
.baseUrl(“https://abc.def.com/")
.addConverterFactory(ScalarsConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
GetTokenInterface服务=改型.create(GetTokenInterface.class);
可观察的响应调用=service.getToken1(setAPI\u键,getaccesstoken);
保存字符串;
@检查结果
公共可观察的getToken(){
return service.getToken1(setAPI_键,getaccesstoken)
.subscribeOn(Schedulers.newThread())
.doOnNext(新行动1){
公共无效调用(字符串令牌){
savedToken=令牌;
}
})
.observeOn(AndroidSchedulers.mainThread());
}
公共字符串getSavedToken(){
返回savedToken;
}
}
但是,我不知道在另一节课上,如果不阻塞线程,是否可以准时在这里捕获它:
public class Post_To_Api {
GetAuthenticationToken getauthenticationtoken = new GetAuthenticationToken();
Observable<String> generated_token = getauthenticationtoken.getToken(); //Dont know to get it here on time without blocking thread
generated_token.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<String>() {
@Override
public void onCompleted() {
System.out.print("Complete");
}
@Override
public void onError(Throwable e) {
System.out.print("Fail");
}
@Override
public void onNext(String token) {
authentication_token = token; //getting correct value here
}
});
}
公共类Post\u To\u Api{
GetAuthenticationToken GetAuthenticationToken=新GetAuthenticationToken();
Observable generated_token=getauthenticationtoken.getToken();//不知道如何在不阻塞线程的情况下按时将其获取到这里
生成的_token.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(新订户(){
@凌驾
未完成的公共无效(){
系统输出打印(“完整”);
}
@凌驾
公共无效申报人(可丢弃的e){
系统输出打印(“失败”);
}
@凌驾
public void onNext(字符串标记){
身份验证\u token=token;//在此处获取正确的值
}
});
}
解决方案是保持异步,而不是阻塞
MyApiServide myApiService = // Create your retrofit API service
public Observable<SomeApiResult> requestApiItem() {
return getApiToken()
.flatMap(new Func1<String, Observable<SomeApiResult>>() {
public Observable<SomeApiResult> call(String token) {
return myApiService.requestItem(token);
}
})
.subscribeOn(Schedulers.io())
}
public Observable<String> getApiToken() {
// get token from API as you have
}
// Were you use the API
requestApiItem()
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<SomeApiResult>() {
@Override
public void onCompleted() {
System.out.print("Complete");
}
@Override
public void onError(Throwable e) {
System.out.print("Fail");
}
@Override
public void onNext(SomeApiResult apiResult) {
myView.setText(apiResult.someValue); // or whatever you want to do with result.
}
});
MyApiServide myApiService=//创建您的改装API服务
公共可观察的RequestApItem(){
返回getApiToken()
.flatMap(新函数1(){
公共可观察调用(字符串令牌){
返回myApiService.requestItem(令牌);
}
})
.subscribeOn(Schedulers.io())
}
公共可观测getApiToken(){
//从API获取您所拥有的令牌
}
//你用的是API吗
requestapitem()
.observeOn(AndroidSchedulers.mainThread())
.subscribe(新订户(){
@凌驾
未完成的公共无效(){
系统输出打印(“完整”);
}
@凌驾
公共无效申报人(可丢弃的e){
系统输出打印(“失败”);
}
@凌驾
public void onNext(someapireult apireult){
myView.setText(apireult.someValue);//或对结果执行任何操作。
}
});
您想做什么?刷新令牌?我正在尝试从gettoken()方法返回值,并在另一个类中使用它。我不知道如何在上获取返回值time@FlorescuGeorgeCătălin查看我的编辑。我不知道如何在Post_to_Api类中获得时间价值