java - 奥利奥 : android. content.res.Resources$NotFoundException

标签 java android android-drawable android-resources android-8.0-oreo

我的应用在 Google Play 上似乎存在某些 Android 8.0 设备的特定错误

不幸的是,到目前为止我还无法自己复制该错误。

这是错误日志:

android.content.res.Resources$NotFoundException: 
  at android.content.res.ResourcesImpl.getValueForDensity (ResourcesImpl.java:204)
  at android.content.res.Resources.getDrawableForDensity (Resources.java:875)
  at android.content.res.Resources.getDrawable (Resources.java:818)
  at android.content.res.Resources.getDrawable (Resources.java:793)
  at com.aresproductions.booksummaries.fragments.RecyclerViewAdapterBook.onBindViewHolder (RecyclerViewAdapterBook.java:188)
  at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder (RecyclerView.java:6508)
  at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder (RecyclerView.java:6541)
  at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline (RecyclerView.java:5484)
  at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline (RecyclerView.java:5750)
  at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition (RecyclerView.java:5589)
  at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition (RecyclerView.java:5585)
  at android.support.v7.widget.LinearLayoutManager$LayoutState.next (LinearLayoutManager.java:2231)
  at android.support.v7.widget.LinearLayoutManager.layoutChunk (LinearLayoutManager.java:1558)
  at android.support.v7.widget.LinearLayoutManager.fill (LinearLayoutManager.java:1518)
  at android.support.v7.widget.LinearLayoutManager.onLayoutChildren (LinearLayoutManager.java:610)
  at android.support.v7.widget.RecyclerView.dispatchLayoutStep2 (RecyclerView.java:3719)
  at android.support.v7.widget.RecyclerView.dispatchLayout (RecyclerView.java:3436)
  at android.support.v7.widget.RecyclerView.onLayout (RecyclerView.java:3988)
  at android.view.View.layout (View.java:19692)
  at android.view.ViewGroup.layout (ViewGroup.java:6057)
  at android.support.v4.view.ViewPager.onLayout (ViewPager.java:1769)
  at android.view.View.layout (View.java:19692)
  at android.view.ViewGroup.layout (ViewGroup.java:6057)
  at android.support.design.widget.HeaderScrollingViewBehavior.layoutChild (HeaderScrollingViewBehavior.java:132)
  at android.support.design.widget.ViewOffsetBehavior.onLayoutChild (ViewOffsetBehavior.java:42)
  at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onLayoutChild (AppBarLayout.java:1361)
  at android.support.design.widget.CoordinatorLayout.onLayout (CoordinatorLayout.java:874)
  at android.view.View.layout (View.java:19692)
  at android.view.ViewGroup.layout (ViewGroup.java:6057)
  at android.support.v4.widget.DrawerLayout.onLayout (DrawerLayout.java:1172)
  at android.view.View.layout (View.java:19692)
  at android.view.ViewGroup.layout (ViewGroup.java:6057)
  at android.widget.FrameLayout.layoutChildren (FrameLayout.java:323)
  at android.widget.FrameLayout.onLayout (FrameLayout.java:261)
  at android.view.View.layout (View.java:19692)
  at android.view.ViewGroup.layout (ViewGroup.java:6057)
  at android.widget.LinearLayout.setChildFrame (LinearLayout.java:1791)
  at android.widget.LinearLayout.layoutVertical (LinearLayout.java:1635)
  at android.widget.LinearLayout.onLayout (LinearLayout.java:1544)
  at android.view.View.layout (View.java:19692)
  at android.view.ViewGroup.layout (ViewGroup.java:6057)
  at android.widget.FrameLayout.layoutChildren (FrameLayout.java:323)
  at android.widget.FrameLayout.onLayout (FrameLayout.java:261)
  at android.view.View.layout (View.java:19692)
  at android.view.ViewGroup.layout (ViewGroup.java:6057)
  at android.widget.LinearLayout.setChildFrame (LinearLayout.java:1791)
  at android.widget.LinearLayout.layoutVertical (LinearLayout.java:1635)
  at android.widget.LinearLayout.onLayout (LinearLayout.java:1544)
  at android.view.View.layout (View.java:19692)
  at android.view.ViewGroup.layout (ViewGroup.java:6057)
  at android.widget.FrameLayout.layoutChildren (FrameLayout.java:323)
  at android.widget.FrameLayout.onLayout (FrameLayout.java:261)
  at com.android.internal.policy.DecorView.onLayout (DecorView.java:759)
  at android.view.View.layout (View.java:19692)
  at android.view.ViewGroup.layout (ViewGroup.java:6057)
  at android.view.ViewRootImpl.performLayout (ViewRootImpl.java:2515)
  at android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:2224)
  at android.view.ViewRootImpl.doTraversal (ViewRootImpl.java:1410)
  at android.view.ViewRootImpl$TraversalRunnable.run (ViewRootImpl.java:6834)
  at android.view.Choreographer$CallbackRecord.run (Choreographer.java:1039)
  at android.view.Choreographer.doCallbacks (Choreographer.java:851)
  at android.view.Choreographer.doFrame (Choreographer.java:742)
  at android.view.Choreographer$FrameDisplayEventReceiver.run (Choreographer.java:1025)
  at android.os.Handler.handleCallback (Handler.java:789)
  at android.os.Handler.dispatchMessage (Handler.java:98)
  at android.os.Looper.loop (Looper.java:164)
  at android.app.ActivityThread.main (ActivityThread.java:6809)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.Zygote$MethodAndArgsCaller.run (Zygote.java:240)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:767)

所以这是我的 onBindViewHoler 中的 android.content.res.Resources$NotFoundException

这是我的代码

public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {

    BookItemViewHolder bookItemHolder = (BookItemViewHolder) holder;
    BookModel book = mRecyclerViewItems.get(position);

    // Add the book item details to the book item view.
    bookItemHolder.getTextViewName().setText(book.getName());
    bookItemHolder.getTextViewAuthor().setText(book.getAuthor());
    bookItemHolder.getTextViewYear().setText(book.getYear() + "");

    // Book Covers
    int resourceId = mContext.getResources().getIdentifier(book.getCover(), "drawable", mContext.getPackageName());
    Drawable drawable = mContext.getResources().getDrawable(resourceId); //Error Here!
    bookItemHolder.getImageViewCover().setImageDrawable(drawable);
}

我的书籍封面图像包含在drawable-nodpi 文件夹中。 再次提醒您,这种情况仅发生在某些 Android 8.0 设备上。

谢谢

最佳答案

我遇到了同样的错误,但只有当从 google play 下载时,从 Android Studio 加载本地 apk 才能正常工作。

11-28 17:13:16.271 788-7441/? I/ActivityManager: START u10 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=au.com.forward.pfodAppDemo/.pfodAppDemo bnds=[297,434][579,758] (has extras)} from uid 1010035
11-28 17:13:16.294 788-913/? W/WindowManager: Token{153434f ActivityRecord{731b9ae u10 au.com.forward.pfodAppDemo/.pfodAppDemo t1000970}} failed creating starting window
    android.content.res.Resources$NotFoundException: Resource ID #0x7f080074
        at android.content.res.ResourcesImpl.getValueForDensity(ResourcesImpl.java:224)
        at android.content.res.Resources.getDrawableForDensity(Resources.java:876)
        at android.content.res.Resources.getDrawable(Resources.java:819)
        at android.content.Context.getDrawable(Context.java:605)
        at com.android.internal.widget.ToolbarWidgetWrapper.setIcon(ToolbarWidgetWrapper.java:322)
        at com.android.internal.widget.ActionBarOverlayLayout.setIcon(ActionBarOverlayLayout.java:742)
        at com.android.internal.policy.PhoneWindow.installDecor(PhoneWindow.java:2685)
        at com.android.internal.policy.PhoneWindow.getDecorView(PhoneWindow.java:2067)
        at com.android.server.policy.PhoneWindowManager.addSplashScreen(PhoneWindowManager.java:2965)
        at com.android.server.wm.SplashScreenStartingData.createStartingSurface(SplashScreenStartingData.java:55)
        at com.android.server.wm.AppWindowContainerController.lambda$-com_android_server_wm_AppWindowContainerController_4735(AppWindowContainerController.java:145)
        at com.android.server.wm.-$Lambda$aEpJ2RCAIjecjyIIYTv6ricEwh4.$m$4(Unknown Source:4)
        at com.android.server.wm.-$Lambda$aEpJ2RCAIjecjyIIYTv6ricEwh4.run(Unknown Source:27)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:164)
        at android.os.HandlerThread.run(HandlerThread.java:65)
        at com.android.server.ServiceThread.run(ServiceThread.java:46)

更新 - 2018 年 11 月 30 日

我有 3 个具有相同基本代码的应用程序。但是,当从 Google Play 下载此应用程序时,它缺少图标(恰好是上述错误中的资源 ID)

现在,其他两个应用程序具有适用于所有屏幕密度的图标,而此应用程序仅指定 3 个密度:drawable、drawable_hdpi 和 drawable_mdpi。 IE。正确下载的其他应用程序具有所有密度的图标,上述 3 个以及 xhdpi、xxhdpi 和 xxxhdpi 的额外图标。

也许 Google 的新资源剥离程序会删除密度与 Android 8 Nexus 3 不匹配的图标,但不会保留默认图标。

正在等待 Google Play 对此问题的响应。

关于java - 奥利奥 : android. content.res.Resources$NotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48879562/

相关文章:

java - 理解Java方法声明中的<Req extends Request<Res>, Res extends Response>

java - Android 客户端应用程序无法连接到 PC 上的服务器

android - 将包含渐变的可绘制 xml 转换为位图

android - 如何按比例缩放宽度等于 "match_parent"的任何图像( ImageView )?

java - 封闭表达式,以 n 表示

java - 循环而不为扫描仪创建新变量?

java - Android-Jacoco代码覆盖率忽略了Robolectric测试

android textview 在 android 4.4.2 中的 map fragment 上不可见,但在 Lollipop 设备中可见

javascript - 无法为 React Native 应用程序设置 Twitter 身份验证。错误: Unconfirmed callback

java - 将动画 Drawable 保存为 GIF 文件?