【问题标题】:java.lang.UnsupportedOperationException: Unsupported Service: accessibility android studiojava.lang.UnsupportedOperationException:不支持的服务:无障碍 android studio
【发布时间】:2015-01-03 17:30:09
【问题描述】:

我遇到了这个 UnsupportedOperationException 的问题。我最近切换到 android studio,所以对我来说很新。我想将 recyclerview 添加到我的项目中,并用它做一些事情,但是布局设计师向我抛出了这个错误:

java.lang.UnsupportedOperationException: Unsupported Service: accessibility
at com.android.layoutlib.bridge.android.BridgeContext.getSystemService(BridgeContext.java:465)
at android.support.v7.widget.RecyclerView.<init>(RecyclerView.java:290)
at android.support.v7.widget.RecyclerView.<init>(RecyclerView.java:266)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.jetbrains.android.uipreview.ViewLoader.createNewInstance(ViewLoader.java:379)
at org.jetbrains.android.uipreview.ViewLoader.loadView(ViewLoader.java:99)
at com.android.tools.idea.rendering.LayoutlibCallback.loadView(LayoutlibCallback.java:172)
at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:207)
at android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:132)
at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:806)
at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:64)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:782)
at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
at android.view.LayoutInflater.inflate(LayoutInflater.java:385)
at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:401)
at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:329)
at com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:333)
at com.android.tools.idea.rendering.RenderService$5.compute(RenderService.java:674)
at com.android.tools.idea.rendering.RenderService$5.compute(RenderService.java:663)
at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:932)
at com.android.tools.idea.rendering.RenderService.createRenderSession(RenderService.java:663)
at com.android.tools.idea.rendering.RenderService.render(RenderService.java:790)
at com.intellij.android.designer.designSurface.AndroidDesignerEditorPanel$6.run(AndroidDesignerEditorPanel.java:480)
at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:320)
at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:310)
at com.intellij.util.ui.update.MergingUpdateQueue$2.run(MergingUpdateQueue.java:254)
at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:269)
at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:227)
at com.intellij.util.ui.update.MergingUpdateQueue.run(MergingUpdateQueue.java:217)
at com.intellij.util.concurrency.QueueProcessor.runSafely(QueueProcessor.java:238)
at com.intellij.util.Alarm$Request$1.run(Alarm.java:327)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at java.lang.Thread.run(Thread.java:662)

应该是什么问题,我真的不知道。我看过在项目中实现 RecyclerView 的教程,但这是我使用 Google 官方代码后 Android Studio 给我的。


编辑:它似乎已解决,因为我接受的答案是正确的,但我没有自己尝试过。

编辑:当我接受当前答案时,它与我的问题有些相关,但这不是一个完整的解决方案。如果有人可以或可以为此提供一些修复或解决方法,我将更新已接受的答案,只要它提供此类信息,或者如果问题已由 IntelliJ 或任何开发人员解决。还要感谢 Dave 指出它失败的地方,至少我们可以给开发者写一张票 :)

【问题讨论】:

  • 布局设计师似乎对来自库的视图有一些问题。
  • 没关系,只要它可以在一些基本层面上工作......但我该如何解决呢? :)
  • AFAIK,你需要在 XML 级别工作,而不是拖放的东西。
  • 这也是 XML 级别的,不仅仅是设计器本身

标签: java android android-studio material-design


【解决方案1】:

如果请求的服务不是以下之一,BridgeContext.getSystemService()(从 5.0.0 r1 开始)将抛出 UnsupportedOperationException

  • “layout_inflater”
  • “文本服务”
  • “窗口”
  • “输入法”
  • “权力”
  • “显示”

在这种情况下,抛出的异常将包含所请求服务的名称。

IntelliJ 的 UI 助手似乎没有更新,因为 BridgeContext 不应该要求“可访问性”服务。正如评论者所建议的那样,坚持 XML 布局,而不是所见即所得。

【讨论】:

  • 但我觉得像 Android 这样的平台很有趣,没有像 Visual Studio 或 Xcode 这样的好工具......无论如何,谢谢
  • 这不是 Android 的错,而是 IntelliJ(或在 IntelliJ 中使用 WYSIWYG 编辑器的作者)没有跟上 Android 规范。
  • 我并不是说这是 Android 的错。我只是想指出,谷歌以 IntelliJ 为基础形成了 Android Studio……如果我处于那个位置,我最好确保在我的操作系统发布之日,至少有一个稳定的 IDE 可供开发人员使用使用不会让他们哭血和尿铅
  • WYSIWYG 编辑器通常落后于他们支持的产品的开发。这通常是大多数人不喜欢所见即所得编辑器的原因之一。了解底层 XML 对于面向未来的项目来说要好得多,尽管这需要更多的努力。
  • 虽然是真的,但这不是一个选择,当消费者想在那个时候看到结果时:)
【解决方案2】:

不确定是不是这样,GLSurfaceView-extending 类也发生在我身上。

出于调试目的,我覆盖了onDraw(Canvas)

@Override protected void onDraw(Canvas canvas) {
    this.toString();    // ← wanted a break here
    super.onDraw(canvas);
}

我一删除无意义的this.toString();,设计师就开始工作了。

【讨论】:

    【解决方案3】:

    这个问题最终在 API Level 22 SDK Manager 和 RecyclerView 支持库中得到修复。要在相关 Android 问题(2015 年 3 月 11 日关闭)中引用 this comment,您需要:

    ...通过 SDK 管理器更新到 API 22 的最新 SDK 平台, 并通过更新 Support 更新到最新的回收站视图 通过 SDK 管理器存储库,并在您的 build.gradle 文件中使用 最新版本(22.0.0)

    此外,在设计器工具的顶部,您需要选择 API Android 版本 22。如果您选择较早的版本,即使您拥有最新的支持库,您仍将继续看到错误。

    【讨论】:

    • 你好,请你证明这个答案,因此我最近没有安装 android studio。如果你的答案是真的,那么我会给你正确的答案复选标记:)
    • 我在自己的机器上按照相同的步骤解决了这个问题。
    【解决方案4】:

    我在最新的 1.5.1 工作室中发现了这个错误。 就我而言,它是通过更改 API 级别进行预览来修复的。

    【讨论】:

      【解决方案5】:

      Jost 更改 API 级别 22 或 23。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多