小编Has*_*eem的帖子

通过在改造中透明地发送另一个请求来处理特定错误

以下是我要处理的情况,

  • 如果执行了请求,并且响应指示身份验证令牌已过期,
  • 发送刷新令牌请求
  • 如果刷新令牌请求成功,则重试原始请求

这应该对调用Activity,Fragment等是透明的.从调用者的角度来看,它是一个请求和一个响应.

我在直接使用OkHttpClient之前已经实现了这个流程,但我不知道如何在Retrofit中实现这一点.

也许与这个关于ResponseInterceptor的公开问题相关的东西?

如果在改造中没有直接的方法来实现这一目标,那么实施它的最佳方法是什么?基础监听器类?

我也在使用RoboSpice和Retrofit,如果它在这种情况下有用的话.

android robospice retrofit

6
推荐指数
1
解决办法
1711
查看次数

除非删除SEND权限,否则不会收到GCM消息

为了正确实现GCM,com.google.android.c2dm.SEND应根据官方文档为接收者指定权限:

接收方应该要求com.google.android.c2dm.SEND权限,以便只有GCM框架可以向其发送消息.

但是,当我添加该权限时,收到消息时会收到此错误.

W/GTalkService(25224):[DataMsgMgr]广播意图回调:result = CANCELED forIntent {act = com.google.android.c2dm.intent.RECEIVE cat = [com.XXX.XXX](有附加内容)}

然后是这个错误:

W/ActivityManager(283):权限拒绝:从com.google.android广播Intent {act = com.google.android.c2dm.intent.RECEIVE cat = [com.XXX.XXX] flg = 0x10(有额外内容)}.由于接收方com.XXX.XXX/com.XXX.XXX.GcmBroadcastReceiver,syncadapters.contacts需要com.google.android.c2dm.SEND.

如果我仅删除该权限,而不更改任何其他内容,则接收器正常工作,我可以处理该消息.

这是AndroidManifest.xml中的接收器定义

<receiver
        android:name="com.XXX.XXXX.GcmBroadcastReceiver"
        android:permission="com.google.android.c2dm.SEND" >
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />

            <category android:name="com.XXX.XXX" />
        </intent-filter>
    </receiver>
Run Code Online (Sandbox Code Playgroud)

我在测试期间使用调试证书,以防可能相关.

android google-cloud-messaging

1
推荐指数
1
解决办法
4434
查看次数