我以前看过这个问题,但是答案并不能解决我的问题,所以我猜测这可能是另一个问题。
我的代码在运行时运行良好,但是如果我将活动保留一段时间并稍后再返回-则会崩溃。
该活动包含一个片段,该片段本身包含一个片段。崩溃发生在getContext().getString(R.string.vote_for)
@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();
}
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)
...
getString()
会收到应有的ID,程序将正常运行,直到我更改为其他应用为止。rootView.getResources().getString(R.string.vote_for)
getString(R.string.vote_for)
getParentFragment().getActivity().getString(R.string.vote_for)
我在有问题的行上设置了一个断点,但是在9个应用程序之间切换后调试器将断开连接,因此在两个应用程序之间切换后我无法回到崩溃的行上。如果我对活动生命周期的理解是正确的,则崩溃仅发生onStop()
,onResume()
会恢复正常。
我尝试自行解决此问题,但失败了。我没主意了。其他人遇到过类似的事情吗?谢谢。
答案 0 :(得分:0)
问题源于以下事实:我有几个string.xml文件,并且由于某种原因,在onRestart()
函数之后语言环境发生了变化。因此,onViewCreated()
所引用的XML文件与我期望的不同。解决方案是只更改父活动的onResume()
函数中的语言环境。
也是个好习惯,保持strings.xml文件同步并且不丢失任何值。如果我看到了英语中的字符串,我将能够更快地发现问题。