字符串onStart()的android.content.res.Resources $ NotFoundException

时间:2018-09-17 12:46:58

标签: android android-fragments activity-lifecycle

问题

我以前看过这个问题,但是答案并不能解决我的问题,所以我猜测这可能是另一个问题。

我的代码在运行时运行良好,但是如果我将活动保留一段时间并稍后再返回-则会崩溃。

该活动包含一个片段,该片段本身包含一个片段。崩溃发生在getContext().getString(R.string.vote_for)

上的onViewCreated()内部

代码

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    TextView description = rootView.findViewById(R.id.votes_chart_desc);
    description.setText(getArguments().getString("voteItemDesc"));

    int votesForNum = getArguments().getInt("voteFor");
    int voteAgainstNum = getArguments().getInt("voteAgainst");
    int voteAbstainNum = getArguments().getInt("voteAbstain");

    PieChart chart = rootView.findViewById(R.id.votes_chart);
    ArrayList<PieEntry> entries = new ArrayList<>();

    # CRASH happens here, inside the if, when evaluating getString().
    if (votesForNum > 0) entries.add(new PieEntry(votesForNum, getContext().getString(R.string.vote_for)));
    if (voteAgainstNum > 0) entries.add(new PieEntry(voteAgainstNum, getContext().getString(R.string.vote_against)));
    if (voteAbstainNum > 0) entries.add(new PieEntry(voteAbstainNum, getContext().getString(R.string.vote_abstain)));

    PieDataSet set = new PieDataSet(entries, "");
    set.setColors(ColorTemplate.MATERIAL_COLORS);
    PieData data = new PieData(set);
    chart.setData(data);
    chart.invalidate();
}

Stacktrace

 FATAL EXCEPTION: main
  Process: [myprocess], PID: 11262
  java.lang.RuntimeException: Unable to start activity ComponentInfo{...}: android.content.res.Resources$NotFoundException: String resource ID #0x7f0e003b
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2729)
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2790)
      at android.app.ActivityThread.-wrap12(ActivityThread.java)
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1505)
      at android.os.Handler.dispatchMessage(Handler.java:102)
      at android.os.Looper.loop(Looper.java:173)
      at android.app.ActivityThread.main(ActivityThread.java:6523)
      at java.lang.reflect.Method.invoke(Native Method)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:938)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:828)
   Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x7f0e003b
      at android.content.res.Resources.getText(Resources.java:352)
      at android.content.res.Resources.getString(Resources.java:398)
      at android.content.Context.getString(Context.java:476)
      at [myprocess].Votes.VoteFragment.onViewCreated(VoteFragment.java:65)
      ...

我尝试过的事情/我搜索过的问题

  1. This question seemed similar (resource exists, but error)-清理项目没有帮助
  2. This is not similar, but similar exception-getString()会收到应有的ID,程序将正常运行,直到我更改为其他应用为止。
  3. Not similar to my issue,OP以某种方式删除了其布局。我的布局存在,并且可以正常使用,直到您切换应用为止。
  4. Duplicate of 2,无关。
  5. Duplicate of 2,无关。
  6. 将崩溃行更改为rootView.getResources().getString(R.string.vote_for)
  7. 将崩溃行更改为getString(R.string.vote_for)
  8. 将崩溃行更改为getParentFragment().getActivity().getString(R.string.vote_for)

调试器信息

我在有问题的行上设置了一个断点,但是在9个应用程序之间切换后调试器将断开连接,因此在两个应用程序之间切换后我无法回到崩溃的行上。如果我对活动生命周期的理解是正确的,则崩溃仅发生onStop()onResume()会恢复正常。

我尝试自行解决此问题,但失败了。我没主意了。其他人遇到过类似的事情吗?谢谢。

1 个答案:

答案 0 :(得分:0)

问题源于以下事实:我有几个string.xml文件,并且由于某种原因,在onRestart()函数之后语言环境发生了变化。因此,onViewCreated()所引用的XML文件与我期望的不同。解决方案是只更改父活动的onResume()函数中的语言环境。

也是个好习惯,保持strings.xml文件同步并且不丢失任何值。如果我看到了英语中的字符串,我将能够更快地发现问题。