将 Otto 与保留的 Fragment 一起使用时出现 IllegalArgumentException

2024-01-26

我在用奥托1.3.3 http://square.github.io/otto/当我恢复我的申请时,有时我会得到一个IllegalArgumentException具有以下堆栈跟踪:

Caused by: java.lang.IllegalArgumentException: Producer method for type class 
com.couchsurfing.mobile.ui.setup
        .SessionProviderFragment$SessionConnectionStateChangeEvent found on 
        type class com.couchsurfing.mobile.ui.setup.SessionProviderFragment, 
        but already registered by type class 
        com.couchsurfing.mobile.ui.setup.SessionProviderFragment.
    at com.squareup.otto.Bus.register(Bus.java:194)
    at com.couchsurfing.mobile.ui.BaseRetainedFragment
       .onCreate(BaseRetainedFragment.java:20)

The SessionProviderFragment保留了它的实例,请在下面找到扩展类:

public abstract class BaseRetainedFragment extends SherlockFragment {

    @Inject
    Bus bus;

    @Override
    public void onCreate(final Bundle state) {
        super.onCreate(state);
        ((CouchsurfingApplication) getActivity().getApplication()).inject(this);
        setRetainInstance(true);
        bus.register(this);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        bus.unregister(this);
        bus = null;
    }
}

我尝试使用bus.register(this) in onAttach() or onCreate(),这并没有改变问题。


在巴士上登记的正确地点是onResume()注销的正确位置是onPause()像这样:

public abstract class BaseRetainedFragment extends RoboSherlockFragment {
    @Inject private Bus bus;

    @Override
    public void onCreate(final Bundle state) {
        super.onCreate(state);
        setRetainInstance(true);
    }

    @Override
    public void onResume() {
        super.onResume();
        bus.register(this);
    }

    @Override
    public void onPause() {
        super.onDestroy();
        bus.unregister(this);
    }
}

注意onDestroy() is 不保证被调用 http://developer.android.com/reference/android/app/Activity.html#onDestroy%28%29.

你可能会对此发表评论并说,嘿克里斯,如果我注册onResume()并且在我点击此方法之前事件被触发,我不会收到事件!你是对的,但这意味着你没有使用制片人 http://square.github.io/otto/就像你应该的那样。

另请注意,如果您使用机器人夏洛克 https://github.com/rtyley/roboguice-sherlock/blob/master/src/main/java/com/github/rtyley/android/sherlock/roboguice/fragment/RoboSherlockFragment.java您不必自己注射。你也不需要null the Bus当片段超出范围时,垃圾收集器将为您清理它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Otto 与保留的 Fragment 一起使用时出现 IllegalArgumentException 的相关文章

  • Android 4.4.2 - java.lang.RuntimeException:执行未恢复的活动停止

    我在 4 4 2 设备上遇到此异常 在 Android 4 3 或更低版本的设备上无法重现 设置是我有一个家庭活动 支持的子类ActionBarActivity 家庭活动检查布尔标志 如果为真 则启动启动画面活动 是的 理想情况下启动画面出
  • 如何在 Android / Java 中获取图像的分辨率

    如何在 Android 中找到任何图像的分辨率 获取存储在磁盘中的图像大小的有效方法 例如获取用户选择上传的图像文件的大小 是使用BitmapFactory Options并设置inJustDecodeBounds为真 这样做你就会获取图像
  • Android 2.2 SDK - Droid X 相机活动无法正常完成

    我注意到我在 Droid X 上调用的默认相机活动与我的 Droid 和 Nexus One 上的默认相机活动看起来不同 在 Droid 和 Nexus One 上选择 确定 后 活动将完成 Droid X 有一个 完成 按钮 它将带您返回
  • 使用 android AudioTrack 在左或右扬声器中播放声音

    我正在应用程序中的 AudioTrack 的帮助下播放声音 但我想在特定扬声器 耳朵中播放声音 即左扬声器或右扬声器或两个扬声器 以下代码是我用来播放声音的 private AudioTrack generateTone double fr
  • 在 Android 中长按时从操作模式中删除后退/主页按钮

    我已经在里面长按实现了上下文操作模式recycler view 为此我打电话给ActionModeCallback从创建动作模式开始 创建动作模式时 默认显示后退箭头 检查如下 单击后退箭头 操作模式将关闭 现在我想要hide or rem
  • Retrofit-2 内容类型问题

    我的 Api 接受 Content Type application json 作为标头 我按照改造文档中所述完美设置了标题 Headers Content Type application json POST user classes C
  • 如何从 Retrofit2 获取字符串响应?

    我正在做 android 正在寻找一种方法来执行超级基本的 http GET POST 请求 我不断收到错误 java lang IllegalArgumentException Unable to create converter for
  • 如何以编程方式断开拨出呼叫

    我使用以下代码以编程方式断开呼叫 但它不起作用 private void callDisconnect try TelephonyManager manager TelephonyManager this getSystemService
  • 应用内结算错误

    我的 UNMANAGED 应用内购买无法正常工作 在它完美运行之前 我可以使用测试帐户成功购买 但它突然不起作用了 因为我记得我对商家帐户所做的只是添加更多 2 4 个测试帐户 添加后 我的应用内购买将不起作用 所以我更新了公钥并上传了一个
  • Web 视图未在 Android 中加载本地 html 文件

    I am integrating html in android I have created a web view But i am not able load local html page Surprisingly web view
  • 如何持续更新MPAndroidChart中的Y轴值

    我希望 LineChart 中的轴能够实时调整其最大值和最小值 当新数据的 Y 值增加 正值和负值 时 像 ResetAxisMaxValue 和 ResetAxisMinValue 这样的函数可以很好地工作 但是 一旦信号再次变低 Y 值
  • Firebase ANR - 甚至不使用 firebase

    随着 GMS 的最新更新 引入了新的 ANR 如果您退出应用程序 然后返回 则 ANR 就会初始化 线程跟踪似乎指向 Firebase 但我什至从未开始使用 Firebase 我猜它一定是新的 GMS 包的一部分 06 11 00 34 0
  • 在 Jetpack Compose 中跨可组合函数重复使用一组预览注释

    在 Jetpack Compose 中迈出第一步 这非常令人惊奇 除了一个恼人的问题 我有一组固定的预览 正常 深色和 RTL Preview name Normal group Screen showBackground true Pre
  • 无法获取 Facebook 传入请求

    我正在尝试在我的 Facebook android 游戏应用程序中实现发送数据并接受该数据 我正在关注https developers facebook com docs android send requests notification
  • 如何以编程方式启动 ssh 服务器 android,以及如何获取连接到设备的用户名和密码

    我正在开发像这样的应用程序sshdroid 我想在 Android 操作系统上打开 ssh 连接 并且我想从电脑连接应用程序 我使用了 JSCH lib 但是这个lib用于将android连接到pc 我的要求是pc到android 任何人都
  • Android Studio IDE 上的“文本/设计”选项卡缺少新的 Android 项目

    如何在创建新项目期间自动创建的 Activity main xml 文件的 src main res layout 文件夹中启用文本 设计选项卡 如果我右键单击并在所述文件夹上创建 xml 文件 则设计 文本选项卡存在 有什么建议吗 谢谢
  • Android AutoCompleteTextView 带芯片

    我不确定我是否使用了正确的词语来描述此 UI 功能 但我已附上我希望在我的应用程序中实现的目标的快照 它由 Go SMS 使用 用户在编辑文本中键入联系人 在用户从完成下拉列表中选择联系人后 该联系人将被插入到编辑文本中 如附图所示 编辑文
  • 在没有 Wifi 的情况下获取 Android 设备的 MAC 地址

    如何获取没有 Wifi 接口的 Android 设备 例如 Android 模拟器 的网络接口的 MAC 地址 通过WifiManager返回获取的WifiInfonull EDIT 更清楚地说 我必须与本地网络上的现有网络协议 不是我设计
  • Android 和 Java 中绘制椭圆的区别

    在Java中由于某种原因Ellipse2D Double使用参数 height width x y 当我创建一个RectF在Android中参数是 left top right bottom 所以我对适应差异有点困惑 如果在 Java 中创
  • 当ScrollView滚动到底部时加载更多数据

    我有一个带有动态加载内容的滚动视图 有时可能会有很多内容 所以我想在用户滚动到底部时加载更多内容 我搜索了合适的方法 发现了两种 onScrollChanged and getScrollY 但我不知道如何将它用于我的目的 请给我一些建议

随机推荐

  • 我可以为我的函数和类使用 PHP 保留名称吗?

    我想创建一个名为 new 的函数和一个名为 case 的类 我可以用 PHP 做到这一点吗 No http www php net manual en reserved keywords php you http codepad org z
  • 共享两个组合框的数据源

    我的 GUI 中有多个组合框 它们都需要数据 这些数据会随机变化 因此需要一种快速方法来保持所有值同步 我遇到了 DefaultComboBoxModel 它实际上非常适合 唯一的问题是 我需要组合框彼此独立 这意味着 如果我在其中选择一个
  • 页面重新加载时 Angular 应用程序中的 Grunt URL 重写

    Grunt 文件中的 livereload 块如下所示 livereload options open true middleware function connect options middleware var optBase type
  • 默认参数和非默认参数的顺序

    在Python中 我知道默认参数出现在末尾 并且非默认参数不能跟在默认参数后面 没事儿 例如 gt gt gt def foo x 0 y return x y SyntaxError non default argument follow
  • ggplot - 多个图例排列

    我想在 ggplot 中排列具有多行和多列的多个图例 然而目前 从文档中我只能决定方向或操作 1 个图例内的行 列 我是否忽略了什么 感谢您提供解决方案的任何参考点 这是示例代码以及我所做的和预期的结果 data lt seq 1000 4
  • Minecraft 如何进行光照? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我唯一熟悉的模型是漫射照明 但这看起来比那要复杂得多 每个方块的亮度级别从 15 到 0 每个级别都比其上方的级别低 20 如果一个正
  • 如何将摘要输出转换为数据框?

    我总结了由 ID 组成的数据框 称为 DATA 的一列 以便获得给定列中每个 ID 的总数 我想将其转换为另一个数据框 称为 TOTALNUM 所以我有两列 第一列是 ID 本身 第二列是每个 ID 的总数 这可能吗 样本数据 ids lt
  • 在 iOS 上将立体声音频拆分为单声道流

    如果已回答此问题 我们深表歉意 我看到了很多问题 但没有好的答案 我正在尝试将立体声音乐从 iPod 库导出到两个单声道 caf 文件 我怎样才能在 iOS 上做到这一点 我目前正在使用 Objective C Thanks 更新 我已经成
  • 如何在 Flutter 中使屏幕可滚动?

    在我的 Flutter 项目中 在一页中我有一些行 包括垂直对齐的卡片 现在 我希望这个屏幕可以滚动 我尝试将该列替换为Listview但没有成功 我也尝试用它包裹它单子滚动视图但没有用 它显示如下图所示 这是代码 HomeFragment
  • 将 Moq 模拟对象传递给构造函数

    我已经使用 RhinoMocks 有一段时间了 但刚刚开始研究起订量 我有一个非常基本的问题 令我惊讶的是 这并没有立即可用 假设我有以下类定义 public class Foo private IBar bar public Foo IB
  • 如何在.NET 中从经过身份验证的 Twitter oauth_token 注册/登录解析用户?

    我用过OAuth1验证器 https github com xamarin Xamarin Auth blob master src Xamarin Auth OAuth1Authenticator cs L83类来自Xamarin Aut
  • 如何在身份服务器4中获取客户端的远程IP地址

    上下文变量 ResourceOwnerPasswordValidationContext 中是否有一个属性 可让我访问发送初始身份验证请求的客户端的 IP 地址 在该上下文中没有类似的信息可供您获取 你唯一的选择就是注射IHttpConte
  • 活动未发现异常?

    我正在得到一个ActivityNotFoundException在下面的代码中 主程序 java Intent intent new Intent intent setAction com test app TEST startActivi
  • 调试调试和发布版本之间差异的最佳实践和工具?

    我见过一些帖子讨论了调试和发布版本之间可能导致差异的原因 但我认为没有人从开发的角度解决了解决问题的最有效方法是什么 当发布版本中出现错误但调试版本中没有出现错误时 我做的第一件事是通过 valgrind 运行我的程序 希望得到更好的分析
  • 从 PHP 数组中删除 NULL、FALSE 和 ''(但不包括 0)

    我想删除NULL FALSE and 价值观 I used array filter但它删除了0的也 有什么功能可以实现我想要的功能吗 array NULL FALSE 0 1 gt array 0 1 array filter http
  • 如何使用源队列并将其返回给调用者而不具体化它?

    我正在尝试使用新的 Akka 流 想知道如何使用源队列并将其返回给调用者 而不在我的代码中实现它 想象一下 我们有一个库可以进行多次异步调用并通过以下方式返回结果Source 函数看起来像这样 def findArticlesByTitle
  • Java运行命令行包含空格

    我正在尝试从我的 Java 应用程序运行 bat 文件 我已经尝试了所有能找到的方法 但似乎都不起作用 问题是 bat 文件的路径包含空格 我在用着this http viralpatel net blogs how to execute
  • 什么是神奇数字?为什么有些人认为它们不好?

    什么是神奇数字 为什么许多程序员建议避免使用它们 幻数是在代码中直接使用数字 例如 如果您有 在 Java 中 public class Foo public void setPassword String password don t d
  • 自运行服务中的 Toast

    我有一个运行远程服务然后退出的 Android 活动 服务本身轮询设备节点并检查更改 我想用 toast 来提醒用户 但我没能让它工作 Toast 没有显示 过了一会儿 Android 喊道我的应用程序没有响应 顺便说一句 我不想 再次启动
  • 将 Otto 与保留的 Fragment 一起使用时出现 IllegalArgumentException

    我在用奥托1 3 3 http square github io otto 当我恢复我的申请时 有时我会得到一个IllegalArgumentException具有以下堆栈跟踪 Caused by java lang IllegalArgu