【问题标题】:ResourcesNotFoundException after return of an intent to another app将意图返回到另一个应用程序后的 ResourcesNotFoundException
【发布时间】:2015-11-05 16:29:58
【问题描述】:

我正在开发一个 Android 应用程序,并在其中生成了一些 PDF 文件。生成它们后,我会向应用程序启动 Intent 以显示 PDF(如 Acrobat)。

一旦我按下返回键返回我的应用程序,它在Samsung Galaxy S5 上崩溃并出现以下错误,而三星修改了正常的Android 5

11-05 17:04:29.876: E/AndroidRuntime(1515): FATAL EXCEPTION: main
11-05 17:04:29.876: E/AndroidRuntime(1515): Process: (my package), PID: 1515
11-05 17:04:29.876: E/AndroidRuntime(1515): android.content.res.Resources$NotFoundException: File res/layout-v21/adapter_historie.xml from xml type layout resource ID #0x7f04001e
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.content.res.Resources.loadXmlResourceParser(Resources.java:3953)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.content.res.Resources.loadXmlResourceParser(Resources.java:3900)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.content.res.Resources.getLayout(Resources.java:2149)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.view.LayoutInflater.inflate(LayoutInflater.java:413)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at (my package).adapter.HistorienAdapter.onCreateViewHolder(HistorienAdapter.java:52)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at (my package).adapter.HistorienAdapter.onCreateViewHolder(HistorienAdapter.java:1)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:5223)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4449)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4359)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1961)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1370)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1333)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:562)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2900)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3071)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.view.View.layout(View.java:16550)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.view.ViewGroup.layout(ViewGroup.java:5303)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.view.View.layout(View.java:16550)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.view.ViewGroup.layout(ViewGroup.java:5303)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.view.View.layout(View.java:16550)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.view.ViewGroup.layout(ViewGroup.java:5303)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:1043)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.view.View.layout(View.java:16550)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.view.ViewGroup.layout(ViewGroup.java:5303)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:2102)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1956)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.widget.LinearLayout.onLayout(LinearLayout.java:1865)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.view.View.layout(View.java:16550)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.view.ViewGroup.layout(ViewGroup.java:5303)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.view.View.layout(View.java:16550)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.view.ViewGroup.layout(ViewGroup.java:5303)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:2102)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1956)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.widget.LinearLayout.onLayout(LinearLayout.java:1865)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.view.View.layout(View.java:16550)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.view.ViewGroup.layout(ViewGroup.java:5303)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.view.View.layout(View.java:16550)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.view.ViewGroup.layout(ViewGroup.java:5303)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:2102)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1956)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.widget.LinearLayout.onLayout(LinearLayout.java:1865)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.view.View.layout(View.java:16550)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.view.ViewGroup.layout(ViewGroup.java:5303)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.view.View.layout(View.java:16550)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.view.ViewGroup.layout(ViewGroup.java:5303)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2312)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2025)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1180)
11-05 17:04:29.876: E/AndroidRuntime(1515):     at android.view.ViewRo

或者在Google Nexus 5Cyanogenmod 12.1 上使用此堆栈跟踪:

11-06 19:47:45.871: E/AndroidRuntime(22636): FATAL EXCEPTION: main
11-06 19:47:45.871: E/AndroidRuntime(22636): Process: (my package).vaz, PID: 22636
11-06 19:47:45.871: E/AndroidRuntime(22636): android.content.res.Resources$NotFoundException: File res/layout-v21/adapter_historie.xml from xml type layout resource ID #0x7f04001e
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.content.res.Resources.loadXmlResourceParser(Resources.java:2843)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.content.res.Resources.loadXmlResourceParser(Resources.java:2798)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.content.res.Resources.getLayout(Resources.java:1143)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.view.LayoutInflater.inflate(LayoutInflater.java:412)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at (my package).vaz.adapter.HistorienAdapter.onCreateViewHolder(HistorienAdapter.java:51)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at (my package).vaz.adapter.HistorienAdapter.onCreateViewHolder(HistorienAdapter.java:1)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:5223)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4449)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4359)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1961)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1370)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1333)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:562)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2900)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3071)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.view.View.layout(View.java:15686)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.view.ViewGroup.layout(ViewGroup.java:5039)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.view.View.layout(View.java:15686)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.view.ViewGroup.layout(ViewGroup.java:5039)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.view.View.layout(View.java:15686)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.view.ViewGroup.layout(ViewGroup.java:5039)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:1043)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.view.View.layout(View.java:15686)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.view.ViewGroup.layout(ViewGroup.java:5039)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.view.View.layout(View.java:15686)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.view.ViewGroup.layout(ViewGroup.java:5039)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.view.View.layout(View.java:15686)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.view.ViewGroup.layout(ViewGroup.java:5039)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.view.View.layout(View.java:15686)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.view.ViewGroup.layout(ViewGroup.java:5039)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.view.View.layout(View.java:15686)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.view.ViewGroup.layout(ViewGroup.java:5039)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.view.View.layout(View.java:15686)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.view.ViewGroup.layout(ViewGroup.java:5039)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.view.View.layout(View.java:15686)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.view.ViewGroup.layout(ViewGroup.java:5039)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2086)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1843)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1061)
11-06 19:47:45.871: E/AndroidRuntime(22636):    at android.view.ViewR

(完整的跟踪可以找到here

在我的代码的这一部分

public HistorienAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View layout = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.adapter_historie, parent, false);

    return new ViewHolder(layout);
}

我在android.app.Fragment 中启动Intent,如下所示:

Uri path = Uri.fromFile(file);

Intent viewintent = new Intent(Intent.ACTION_VIEW);
viewintent.setDataAndType(path, "application/pdf");
getActivity().startActivity(viewintent);

【问题讨论】:

  • 您的 .APK 文件似乎缺少资源文件。它应该在res/layout-v21/adapter_historie.xml。不过,不确定您是如何做到的。您是否有某种可能导致此问题的自定义构建系统?
  • @SnildDolkow 那是不可能的。在启动 Intent 之前,布局会正确加载。一切正常。就在我从另一个应用程序返回时,它崩溃了,所以布局必须在 .apk

标签: java android pdf android-fragments android-intent


【解决方案1】:

我和 Pinguin895 一起开发了这个应用程序,并在 Snild Dolkow 给出了我们应该尝试捕获异常的好答案之后找到了我们问题的解决方案。

我已经尝试捕获了“android.content.res.Resources.NotFoundException”并得到了这个堆栈跟踪,其中包含由包含引起的通缉:

11-07 09:54:08.912: I/AppCompatDelegate(689): The Activity's LayoutInflater already has a Factory installed so we can not install AppCompat's
11-07 09:54:11.581: W/System.err(689): java.lang.RuntimeException: Assetmanager has been closed
11-07 09:54:11.582: W/System.err(689):  at android.content.res.AssetManager.openXmlBlockAsset(AssetManager.java:501)
11-07 09:54:11.582: W/System.err(689):  at android.content.res.Resources.loadXmlResourceParser(Resources.java:2825)
11-07 09:54:11.582: W/System.err(689):  at android.content.res.Resources.loadXmlResourceParser(Resources.java:2798)
11-07 09:54:11.582: W/System.err(689):  at android.content.res.Resources.getLayout(Resources.java:1143)
11-07 09:54:11.582: W/System.err(689):  at android.view.LayoutInflater.inflate(LayoutInflater.java:412)
11-07 09:54:11.582: W/System.err(689):  at (my package).vaz.adapter.HistorienAdapter.onCreateViewHolder(HistorienAdapter.java:53)
11-07 09:54:11.582: W/System.err(689):  at (my package).vaz.adapter.HistorienAdapter.onCreateViewHolder(HistorienAdapter.java:1)
11-07 09:54:11.582: W/System.err(689):  at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:5223)
11-07 09:54:11.582: W/System.err(689):  at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4449)
11-07 09:54:11.582: W/System.err(689):  at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4359)
11-07 09:54:11.582: W/System.err(689):  at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1961)
11-07 09:54:11.582: W/System.err(689):  at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1370)
11-07 09:54:11.582: W/System.err(689):  at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1333)
11-07 09:54:11.582: W/System.err(689):  at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:562)
11-07 09:54:11.582: W/System.err(689):  at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2900)
11-07 09:54:11.582: W/System.err(689):  at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3071)
11-07 09:54:11.582: W/System.err(689):  at android.view.View.layout(View.java:15686)
11-07 09:54:11.582: W/System.err(689):  at android.view.ViewGroup.layout(ViewGroup.java:5039)
11-07 09:54:11.582: W/System.err(689):  at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
11-07 09:54:11.582: W/System.err(689):  at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
11-07 09:54:11.582: W/System.err(689):  at android.view.View.layout(View.java:15686)
11-07 09:54:11.582: W/System.err(689):  at android.view.ViewGroup.layout(ViewGroup.java:5039)
11-07 09:54:11.582: W/System.err(689):  at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
11-07 09:54:11.582: W/System.err(689):  at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
11-07 09:54:11.582: W/System.err(689):  at android.view.View.layout(View.java:15686)
11-07 09:54:11.582: W/System.err(689):  at android.view.ViewGroup.layout(ViewGroup.java:5039)
11-07 09:54:11.583: W/System.err(689):  at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:1043)
11-07 09:54:11.583: W/System.err(689):  at android.view.View.layout(View.java:15686)
11-07 09:54:11.583: W/System.err(689):  at android.view.ViewGroup.layout(ViewGroup.java:5039)
11-07 09:54:11.583: W/System.err(689):  at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
11-07 09:54:11.583: W/System.err(689):  at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
11-07 09:54:11.583: W/System.err(689):  at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
11-07 09:54:11.583: W/System.err(689):  at android.view.View.layout(View.java:15686)
11-07 09:54:11.583: W/System.err(689):  at android.view.ViewGroup.layout(ViewGroup.java:5039)
11-07 09:54:11.583: W/System.err(689):  at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
11-07 09:54:11.583: W/System.err(689):  at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
11-07 09:54:11.583: W/System.err(689):  at android.view.View.layout(View.java:15686)
11-07 09:54:11.583: W/System.err(689):  at android.view.ViewGroup.layout(ViewGroup.java:5039)
11-07 09:54:11.583: W/System.err(689):  at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
11-07 09:54:11.583: W/System.err(689):  at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
11-07 09:54:11.583: W/System.err(689):  at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
11-07 09:54:11.583: W/System.err(689):  at android.view.View.layout(View.java:15686)
11-07 09:54:11.583: W/System.err(689):  at android.view.ViewGroup.layout(ViewGroup.java:5039)
11-07 09:54:11.583: W/System.err(689):  at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
11-07 09:54:11.583: W/System.err(689):  at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
11-07 09:54:11.583: W/System.err(689):  at android.view.View.layout(View.java:15686)
11-07 09:54:11.583: W/System.err(689):  at android.view.ViewGroup.layout(ViewGroup.java:5039)
11-07 09:54:11.583: W/System.err(689):  at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
11-07 09:54:11.583: W/System.err(689):  at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
11-07 09:54:11.584: W/System.err(689):  at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
11-07 09:54:11.584: W/System.err(689):  at android.view.View.layout(View.java:15686)
11-07 09:54:11.584: W/System.err(689):  at android.view.ViewGroup.layout(ViewGroup.java:5039)
11-07 09:54:11.584: W/System.err(689):  at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
11-07 09:54:11.584: W/System.err(689):  at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
11-07 09:54:11.584: W/System.err(689):  at android.view.View.layout(View.java:15686)
11-07 09:54:11.584: W/System.err(689):  at android.view.ViewGroup.layout(ViewGroup.java:5039)
11-07 09:54:11.584: W/System.err(689):  at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2086)
11-07 09:54:11.584: W/System.err(689):  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1843)
11-07 09:54:11.584: W/System.err(689):  at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1061)
11-07 09:54:11.584: W/System.err(689):  at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5891)
11-07 09:54:11.584: W/System.err(689):  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
11-07 09:54:11.584: W/System.err(689):  at android.view.Choreographer.doCallbacks(Choreographer.java:580)
11-07 09:54:11.584: W/System.err(689):  at android.view.Choreographer.doFrame(Choreographer.java:550)
11-07 09:54:11.584: W/System.err(689):  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
11-07 09:54:11.584: W/System.err(689):  at android.os.Handler.handleCallback(Handler.java:739)
11-07 09:54:11.584: W/System.err(689):  at android.os.Handler.dispatchMessage(Handler.java:95)
11-07 09:54:11.584: W/System.err(689):  at android.os.Looper.loop(Looper.java:135)
11-07 09:54:11.584: W/System.err(689):  at android.app.ActivityThread.main(ActivityThread.java:5294)
11-07 09:54:11.584: W/System.err(689):  at java.lang.reflect.Method.invoke(Native Method)
11-07 09:54:11.584: W/System.err(689):  at java.lang.reflect.Method.invoke(Method.java:372)
11-07 09:54:11.584: W/System.err(689):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
11-07 09:54:11.584: W/System.err(689):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)
11-07 09:54:11.584: W/System.err(689): android.content.res.Resources$NotFoundException: File res/layout-v21/adapter_historie.xml from xml type layout resource ID #0x7f04001e
11-07 09:54:11.585: W/System.err(689):  at android.content.res.Resources.loadXmlResourceParser(Resources.java:2843)
11-07 09:54:11.585: W/System.err(689):  at android.content.res.Resources.loadXmlResourceParser(Resources.java:2798)
11-07 09:54:11.585: W/System.err(689):  at android.content.res.Resources.getLayout(Resources.java:1143)
11-07 09:54:11.585: W/System.err(689):  at android.view.LayoutInflater.inflate(LayoutInflater.java:412)
11-07 09:54:11.585: W/System.err(689):  at (my package).vaz.adapter.HistorienAdapter.onCreateViewHolder(HistorienAdapter.java:53)
11-07 09:54:11.585: W/System.err(689):  at (my package).vaz.adapter.HistorienAdapter.onCreateViewHolder(HistorienAdapter.java:1)
11-07 09:54:11.585: W/System.err(689):  at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:5223)
11-07 09:54:11.585: W/System.err(689):  at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4449)
11-07 09:54:11.585: W/System.err(689):  at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4359)
11-07 09:54:11.585: W/System.err(689):  at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1961)
11-07 09:54:11.585: W/System.err(689):  at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1370)
11-07 09:54:11.585: W/System.err(689):  at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1333)
11-07 09:54:11.585: W/System.err(689):  at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:562)
11-07 09:54:11.585: W/System.err(689):  at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2900)
11-07 09:54:11.585: W/System.err(689):  at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3071)
11-07 09:54:11.585: W/System.err(689):  at android.view.View.layout(View.java:15686)
11-07 09:54:11.585: W/System.err(689):  at android.view.ViewGroup.layout(ViewGroup.java:5039)
11-07 09:54:11.585: W/System.err(689):  at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
11-07 09:54:11.585: W/System.err(689):  at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
11-07 09:54:11.585: W/System.err(689):  at android.view.View.layout(View.java:15686)
11-07 09:54:11.585: W/System.err(689):  at android.view.ViewGroup.layout(ViewGroup.java:5039)
11-07 09:54:11.585: W/System.err(689):  at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
11-07 09:54:11.586: W/System.err(689):  at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
11-07 09:54:11.586: W/System.err(689):  at android.view.View.layout(View.java:15686)
11-07 09:54:11.586: W/System.err(689):  at android.view.ViewGroup.layout(ViewGroup.java:5039)
11-07 09:54:11.586: W/System.err(689):  at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:1043)
11-07 09:54:11.586: W/System.err(689):  at android.view.View.layout(View.java:15686)
11-07 09:54:11.586: W/System.err(689):  at android.view.ViewGroup.layout(ViewGroup.java:5039)
11-07 09:54:11.586: W/System.err(689):  at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
11-07 09:54:11.586: W/System.err(689):  at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
11-07 09:54:11.586: W/System.err(689):  at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
11-07 09:54:11.586: W/System.err(689):  at android.view.View.layout(View.java:15686)
11-07 09:54:11.586: W/System.err(689):  at android.view.ViewGroup.layout(ViewGroup.java:5039)
11-07 09:54:11.586: W/System.err(689):  at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
11-07 09:54:11.586: W/System.err(689):  at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
11-07 09:54:11.586: W/System.err(689):  at android.view.View.layout(View.java:15686)
11-07 09:54:11.586: W/System.err(689):  at android.view.ViewGroup.layout(ViewGroup.java:5039)
11-07 09:54:11.586: W/System.err(689):  at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
11-07 09:54:11.586: W/System.err(689):  at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
11-07 09:54:11.586: W/System.err(689):  at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
11-07 09:54:11.586: W/System.err(689):  at android.view.View.layout(View.java:15686)
11-07 09:54:11.586: W/System.err(689):  at android.view.ViewGroup.layout(ViewGroup.java:5039)
11-07 09:54:11.586: W/System.err(689):  at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
11-07 09:54:11.586: W/System.err(689):  at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
11-07 09:54:11.586: W/System.err(689):  at android.view.View.layout(View.java:15686)
11-07 09:54:11.586: W/System.err(689):  at android.view.ViewGroup.layout(ViewGroup.java:5039)
11-07 09:54:11.586: W/System.err(689):  at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
11-07 09:54:11.586: W/System.err(689):  at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
11-07 09:54:11.586: W/System.err(689):  at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
11-07 09:54:11.586: W/System.err(689):  at android.view.View.layout(View.java:15686)
11-07 09:54:11.586: W/System.err(689):  at android.view.ViewGroup.layout(ViewGroup.java:5039)
11-07 09:54:11.586: W/System.err(689):  at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
11-07 09:54:11.586: W/System.err(689):  at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
11-07 09:54:11.586: W/System.err(689):  at android.view.View.layout(View.java:15686)
11-07 09:54:11.586: W/System.err(689):  at android.view.ViewGroup.layout(ViewGroup.java:5039)
11-07 09:54:11.586: W/System.err(689):  at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2086)
11-07 09:54:11.586: W/System.err(689):  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1843)
11-07 09:54:11.587: W/System.err(689):  at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1061)
11-07 09:54:11.587: W/System.err(689):  at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5891)
11-07 09:54:11.587: W/System.err(689):  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
11-07 09:54:11.587: W/System.err(689):  at android.view.Choreographer.doCallbacks(Choreographer.java:580)
11-07 09:54:11.587: W/System.err(689):  at android.view.Choreographer.doFrame(Choreographer.java:550)
11-07 09:54:11.587: W/System.err(689):  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
11-07 09:54:11.587: W/System.err(689):  at android.os.Handler.handleCallback(Handler.java:739)
11-07 09:54:11.587: W/System.err(689):  at android.os.Handler.dispatchMessage(Handler.java:95)
11-07 09:54:11.587: W/System.err(689):  at android.os.Looper.loop(Looper.java:135)
11-07 09:54:11.587: W/System.err(689):  at android.app.ActivityThread.main(ActivityThread.java:5294)
11-07 09:54:11.587: W/System.err(689):  at java.lang.reflect.Method.invoke(Native Method)
11-07 09:54:11.587: W/System.err(689):  at java.lang.reflect.Method.invoke(Method.java:372)
11-07 09:54:11.587: W/System.err(689):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
11-07 09:54:11.587: W/System.err(689):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)
11-07 09:54:11.587: W/System.err(689): Caused by: java.lang.RuntimeException: Assetmanager has been closed
11-07 09:54:11.587: W/System.err(689):  at android.content.res.AssetManager.openXmlBlockAsset(AssetManager.java:501)
11-07 09:54:11.587: W/System.err(689):  at android.content.res.Resources.loadXmlResourceParser(Resources.java:2825)
11-07 09:54:11.587: W/System.err(689):  ... 70 more

在对 Assetmanager 已关闭的信息进行了一些研究之后。我发现不应该关闭assetmanager,因为android应用程序需要它来访问.apk中包含的文件(如布局xml文件)

在我们的应用程序中,我们使用资产管理器选择了一个 pdf 文件,该文件位于资产文件夹的 apk 内。输入一些文本后,更改后的 pdf 保存在 sdcard 上。

try (AssetManager am = context.getAssets();
     InputStream is = am.open(vaz.getDatei() + ".pdf");
     OutputStream targetOutputStream = new FileOutputStream(file)) {

     /*
     *[SOME CODE FOR GENERATION AND SAVING]
     */

     Uri path = Uri.fromFile(file);

     Intent viewintent = new Intent(Intent.ACTION_VIEW);
     viewintent.setDataAndType(path, "application/pdf");
     getActivity().startActivity(viewintent);

} catch (InstantiationException | IllegalAccessException e) {
     e.printStackTrace();
}

我们对 java.lang.AutoCloseable 使用了 try-with-resources 从 PDF-Viewer-App 返回后,资产管理器已经关闭,因为 java.lang.AutoCloseable

解决方法是将资产管理器放在 try-with-resources 之外:

AssetManager am = context.getAssets();

try (InputStream is = am.open(vaz.getDatei() + ".pdf");
     OutputStream targetOutputStream = new FileOutputStream(file)) {

     ...

} catch (InstantiationException | IllegalAccessException e) {
     e.printStackTrace();
}

感谢 Snild Dolkow 的努力!

【讨论】:

    【解决方案2】:

    好的,首先,这是什么设备(和软件版本)?与普通 Android 相比,Resources.java 文件似乎添加了很多代码;您的调用堆栈提到了Resources.java:3900Resources.java:3953,但the official version of that file 只有2859 行。可能是您设备的制造商已经修补了 Resources 类(很可能会添加主题支持),并且搞砸了。

    不管怎样,我想我已经在官方代码中确定了相应的行:

    Resources.java:2776:

    2774            getValue(id, value, true);
    2775            if (value.type == TypedValue.TYPE_STRING) {
    2776                return loadXmlResourceParser(value.string.toString(), id,
    2777                        value.assetCookie, type);
    2778            }
    

    ...以及 53 行之后的 Resources.java:2829

    2785    /*package*/ XmlResourceParser loadXmlResourceParser(String file, int id,
    2786            int assetCookie, String type) throws NotFoundException {
    2787        if (id != 0) {
    2788            try {
    2789                // These may be compiled...
    2790                synchronized (mCachedXmlBlockIds) {
    2791                    // First see if this block is in our cache.
    2792                    final int num = mCachedXmlBlockIds.length;
    2793                    for (int i=0; i<num; i++) {
    2794                        if (mCachedXmlBlockIds[i] == id) {
    2795                            //System.out.println("**** REUSING XML BLOCK!  id="
    2796                            //                   + id + ", index=" + i);
    2797                            return mCachedXmlBlocks[i].newParser();
    2798                        }
    2799                    }
    2800
    2801                    // Not in the cache, create a new block and put it at
    2802                    // the next slot in the cache.
    2803                    XmlBlock block = mAssets.openXmlBlockAsset(
    2804                            assetCookie, file);
    2805                    if (block != null) {
    2806                        int pos = mLastCachedXmlBlockIndex+1;
    2807                        if (pos >= num) pos = 0;
    2808                        mLastCachedXmlBlockIndex = pos;
    2809                        XmlBlock oldBlock = mCachedXmlBlocks[pos];
    2810                        if (oldBlock != null) {
    2811                            oldBlock.close();
    2812                        }
    2813                        mCachedXmlBlockIds[pos] = id;
    2814                        mCachedXmlBlocks[pos] = block;
    2815                        //System.out.println("**** CACHING NEW XML BLOCK!  id="
    2816                        //                   + id + ", index=" + pos);
    2817                        return block.newParser();
    2818                    }
    2819                }
    2820            } catch (Exception e) {
    2821                NotFoundException rnf = new NotFoundException(
    2822                        "File " + file + " from xml type " + type + " resource ID #0x"
    2823                        + Integer.toHexString(id));
    2824                rnf.initCause(e);
    2825                throw rnf;
    2826            }
    2827        }
    2828
    2829        throw new NotFoundException(
    2830                "File " + file + " from xml type " + type + " resource ID #0x"
    2831                + Integer.toHexString(id));
    2832    }
    

    现在,如果我没有遗漏任何东西,我发现有两种可能的方法可以到达第 2829 行:

    1. id 为 0
    2. mAssets.openXmlBlockAsset()返回null XmlBlock

    选项 #1 显然不是这种情况,我们可以从您的异常打印中看到您的 id 是 0x7f04001e

    这样就剩下第二个选项了。好吧,让我们检查一下the code for AssetManager.openXmlBlockAsset()

    479    /*package*/ final XmlBlock openXmlBlockAsset(int cookie, String fileName)
    480        throws IOException {
    481        synchronized (this) {
    482            if (!mOpen) {
    483                throw new RuntimeException("Assetmanager has been closed");
    484            }
    485            long xmlBlock = openXmlAssetNative(cookie, fileName);
    486            if (xmlBlock != 0) {
    487                XmlBlock res = new XmlBlock(this, xmlBlock);
    488                incRefsLocked(res.hashCode());
    489                return res;
    490            }
    491        }
    492        throw new FileNotFoundException("Asset XML file: " + fileName);
    493    }
    

    我看不出这段代码可以返回null。它要么返回new XmlBlock,要么抛出异常。

    所以也许我毕竟没有找到正确的行——在Resources.java:2821 处抛出了类似的NotFoundException,但在这种情况下,你的异常堆栈中应该有一个“由”行(授予,它似乎在你的问题中被切断了,所以也许有..?)。似乎不太可能修改代码以将其精确移动到与另一行的预期偏移量,但......

    也许尝试在模拟器/AVD 中而不是在您的设备上运行您的代码,看看是否有同样的错误?如果你不能在那里重现问题,我认为我们将不得不得出结论,你的设备制造商在资源加载代码中搞砸了。

    【讨论】:

    • 感谢您的详细解答!我已经在 2 种不同的设备上进行了尝试。首先是搭载 Android 5 的三星 Galaxy S5,然后是搭载 Cyanogenmod 12.1 的 Google Nexus 5。
    • Cyanogenmod 12.1's Resources.java file 也没有那么多行。请您也从那里使用调用堆栈更新您的帖子吗?你也可以为三星添加 full 调用堆栈。包括任何“由”堆栈(如果存在)。
    • 我添加了第二个堆栈跟踪。我也尝试获取完整的调用堆栈,但我在这里粘贴的内容是我可以从 LogCat 获得的唯一内容。如果有办法获得更详细的版本,我会很高兴听到它
    • 好的,现在我们到了某个地方! This file 似乎是正确的(它与您的 CyanogenMod 堆栈跟踪中的行号匹配)。看起来这不是我的投掷地点,但实际上是有原因的那个。这意味着我们很可能需要完整的堆栈(包括“由”)来找出问题所在。您应该可以通过运行adb logcat -d -bcrash 来获得它。
    • 它仍然被切断:E/AndroidRuntime( 6752): at android.view.ViewRo。但既然你有线条跟随它,我想你不是那个切断它的人。好吧,让我们尝试捕获 NotFoundException。由于您不打算保留此代码,因此您可以尝试捕获所有异常。然后,使用如下内容:int num=0; do { Log.i("PinguinDebug", "Exception #" + (++num), ex); ex=ex.getCause()}。你必须原谅任何语法错误,因为我是在即时写的,但你明白了。这应该会打印出多个异常,这有望让我们弄清楚发生了什么。
    猜你喜欢
    • 2019-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多