android开发网络请求失败怎么办,Android/RxJava如何链接网络请求,并在失败时重试...

我想在Android中使用RxJava链接网络请求,然后在失败时重试。我一直在关注如何做到这一点,而不是进入使用vanilla Android和Retrofit自带的Callback地狱。我能做到这一切的过程中,像这样的异步任务(以下是我需要做的步骤)登录。Android/RxJava如何链接网络请求,并在失败时重试

登录用的用户名/密码,

请求SSO令牌如果用户这种反应是成功的

呼叫发射服务与SSO令牌

我在AsyncTask其中仅但是,当应用程序在使用SSO令牌到期时签下的工作一直在做这个,所以我每次看到它过期时都需要提出请求。

为的AsyncTask的代码如下所示:

private class LoginUserTask extends AsyncTask {

private final String LOG_TAG = LoginUserTask.class.getSimpleName();

@Override

protected Void doInBackground(Void... params) {

OkHttpClient httpClient = ((TribeSocial) getApplication()).getHttpClient();

// Login User

GroupDockService groupDockLoginService =

GroupDockServiceGenerator

.createService(GroupDockService.class,

httpClient, GroupDockUser.class, new GroupDockUserDeserializer());

GroupDockUser groupDockUser = groupDockLoginService.loginUser("Tribe", username, password);

Utility.saveAccountSubdomain(mContext, groupDockUser.getGroupDockSubdomain().getSubdomain());

// Get Sso Token

GroupDockService groupDockService = GroupDockServiceGenerator

.createService(GroupDockService.class, httpClient);

GroupDockSsoResponse ssoResponse =

groupDockService.getSsoToken(Utility.getAccountSubdomain(mContext), true);

Utility.saveSsoToken(mContext, ssoResponse.getSsoToken());

// Sign in user into Tribe service

TribeSocialService tribeSocialLaunchService =

TribeServiceGenerator.createService(TribeSocialService.class,

httpClient, new LenientGsonConverter(new Gson()));

tribeSocialLaunchService.launch(Utility.getSsoToken(mContext));

// Get User id and save it to SharedPreferences

TribeSocialService tribeSocialWhoAmIService =

TribeServiceGenerator.createService(TribeSocialService.class, httpClient,

User.class, new WhoAmIDeserializer());

User tribeUser = tribeSocialWhoAmIService.whoami();

Utility.saveUserId(mContext, tribeUser.getId());

return null;

}

@Override

protected void onPostExecute(Void v) {

Utility.launchMainActivity(mContext);

}

}

我在做与RxJava这项工作尝试像

GroupDockService groupDockLoginService =

GroupDockServiceGenerator

.createService(GroupDockService.class,

mHttpClient, GroupDockUser.class, new GroupDockUserDeserializer());

groupDockLoginService

.loginUserRx("Tribe", username, password)

.subscribeOn(Schedulers.newThread())

.observeOn(AndroidSchedulers.mainThread())

.subscribe(new Subscriber() {

@Override

public void onCompleted() {

}

@Override

public void onError(Throwable e) {

Log.e(LOG_TAG, "I have errored out: " + e.getMessage());

Toast.makeText(mContext,

getString(R.string.username_and_or_password_is_incorrect),

Toast.LENGTH_SHORT).show();

}

@Override

public void onNext(GroupDockUser groupDockUser) {

Utility.saveUsernamePassword(mContext, username, password);

new LoginUserTask().execute();

}

});

在该代码中,我需要做以下

当loginUserRx成功时,我需要将用户名和密码保存到SavedPreferences

然后,我需要提出网络请求以获取sso令牌

之后,我需要发出第三个也是最终的网络请求。

现在的代码只是调用登录用户,一旦成功,就会启动异步任务。理想情况下,我想在这一个请求中将所有请求链接在一起。我一直在试验flatmap,map等,并且无法弄清楚如何在上面列出的过程中链接这些呼叫。

任何人都可以对此有所了解吗?谢谢。

+0

如何['retry'(http://reactivex.io/documentation/operators/retry.html)?我不明白地图或平面地图如何帮助你做你想要的东西 –

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值