android.content.res.Resources $ NotFoundException для строки onStart () - PullRequest
0 голосов
/ 17 сентября 2018

Проблема

Я видел этот вопрос, опубликованный ранее, но ответы не решили мою проблему, поэтому я предполагаю, что это может быть другая проблема.

Мой код работает хорошокогда я запускаю его, но если я оставляю активность на некоторое время и возвращаюсь к ней позже - она ​​падает.

Активность содержит фрагмент, который сам содержит фрагмент.Сбой происходит внутри onViewCreated () в 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();
}

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. Этот вопрос казался похожим (ресурс существует, но ошибка) - Очистка проекта не помогла
  2. Это не похоже, но похоже на исключение - getString() получает и ID как следует, и программа работает, пока я не перехожу на другое приложение.
  3. Не похоже на мою проблему , OP каким-то образом удалил их макет.Мой макет существует и работает до тех пор, пока вы не переключите приложения.
  4. Дубликат 2 , не имеет значения.
  5. Дубликат 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 голосов
/ 17 сентября 2018

Проблема возникла из-за того, что у меня было несколько файлов string.xml, и по какой-то причине локаль изменилась после функции onRestart(). В результате onViewCreated() ссылался на файл XML, отличный от того, который я ожидал. Решением было просто изменить языковой стандарт в функции onResume() родительского действия.

Рекомендуется также синхронизировать файлы strings.xml и не пропустить ни одного значения. Если бы я видел строки на английском языке, я бы смог выявить проблему намного быстрее.

...