27

我更新到 SDK 23 并将 gradle.build 更新到 API 23,将支持库更新到 23.0.0 等,现在在尝试运行应用程序时出现以下错误(编译得很好)。

java.lang.NoSuchFieldError: No instance field mFragments of type Landroid/support/v4/app/FragmentManagerImpl; in class Landroid/support/v4/app/Watson; or its superclasses (declaration of 'android.support.v4.app.Watson' appears in /data/app/com.my.app-1/base.apk)
            at android.support.v4.app.Watson.onCreatePanelMenu(Watson.java:50)
            at com.actionbarsherlock.ActionBarSherlock.callbackCreateOptionsMenu(ActionBarSherlock.java:560)
            at com.actionbarsherlock.internal.ActionBarSherlockNative.dispatchCreateOptionsMenu(ActionBarSherlockNative.java:64)
            at com.actionbarsherlock.app.SherlockFragmentActivity.onCreatePanelMenu(SherlockFragmentActivity.java:164)
            at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:548)
            at com.android.internal.policy.impl.PhoneWindow.doInvalidatePanelMenu(PhoneWindow.java:917)
            at com.android.internal.policy.impl.PhoneWindow$1.run(PhoneWindow.java:258)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

我在所有内容上都恢复到 API 22,但仍然出现错误。

4

6 回答 6

14

我像你一样做了一些事情,但我发现 gradle 可以解决依赖关系,在外部库中我找不到 support-v4-23.0.0、support-v7-23.0.0 和其他版本为 23.0.0 的库。然后我恢复编译'com.android.support:support-v4:22.2.0',问题解决者@mraviator

于 2015-08-21T02:32:59.973 回答
12

谢谢@zmarties的回答,我想添加详细信息和链接

  1. 从 gradle 中删除 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
  2. 从此链接下载 actionbarsherlock 模块 !
  3. 确认您有 'com.android.support:support-v4:20.0.0' 或 23
  4. 打开actionbarsherlock模块src在AnimatorProxy.java中将FloatMath改为Math
  5. 打开 actionbarsherlock 模块 src 在类级别范围内创建变量片段FragmentManagerImpl fragment = (FragmentManagerImpl) this.getSupportFragmentManager(); 在 Watson.java 中
  6. 用片段变量替换所有mFragments 出现

谢谢您的上述回答。

于 2016-09-20T22:02:53.683 回答
6

使用谷歌播放服务版本 8.1.0 而不是 8.4.0 在我这边解决

于 2015-12-18T10:08:20.043 回答
3

我发现如果我进行以下两组更改,我可以使用 SDK 23 构建 ActionBarSherlock:

  • 在 AnimatorProxy.java 中,将FloatMath调用替换为对应的Math调用
  • 在 Watson.java 中,将mFragments字段的使用替换为fragments通过 初始化的局部变量getActiveFragments(null),然后将mFragment引用更改为使用局部变量
于 2015-09-10T14:20:17.897 回答
0

您是否从设计选项卡更改了主布局中的主题视图?尝试在设计选项卡中再次将其更改为 Sherlock 主题视图。

于 2015-08-20T15:55:59.443 回答
0

将项目 eclipse 导入 Android Studio 时我遇到了同样的问题

这对我来说是最好的解决方案

我发现如果我进行以下两组更改,我可以使用 SDK 23 构建 ActionBarSherlock:

在 AnimatorProxy.java 中,将 FloatMath 调用替换为相应的 Math 调用 - 我将 FloatMath - 更改为 Math

在 Waston Class 我有错误 - mFragments.is added 所以,我替换下面的代码而不是检查

mFragments.is added != null

mFragments.getActiveFragments(mCreatedMenus)

需要时无处不在

我已经解决了这些问题。

于 2016-08-30T21:05:00.757 回答