为首选项编写测试,在访问首选项时不断收到 `android.content.res.Resources$NotFoundException`
Writing tests for preferences, keep getting `android.content.res.Resources$NotFoundException` when accessing preferences
我刚开始学习 Android 上的测试,这让我发疯。该功能运行良好,但我无法让我的测试达到 运行。我正在尝试从 SharedPreferences
中读取一个值并将其与 TextView 的内容进行比较。我在 Android Studio 2.3.3.
上使用 Espresso
这一行 String player1Name = sharedPreferences.getString(context.getString(R.string.KEYplayerOneDefaultNameSetting), context.getString(R.string.playerOne));
导致了这个 android.content.res.Resources$NotFoundException: String resource ID #0x7f09004d
异常。这基本上与我在 Fragments 中用于访问共享首选项的代码相同。
我找不到任何引用相同问题的内容。我觉得我只是有一个简单的配置错误,但我无法弄清楚。提前致谢。
这是我的整个测试:
@Test
public void setsPlayerNamesFromSettings(){
Context context = getInstrumentation().getContext();
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
String player1Name = sharedPreferences.getString(context.getString(R.string.KEYplayerOneDefaultNameSetting), context.getString(R.string.playerOne));
onView(withId(R.id.LpCalculatorTextPlayer1Name)).check(matches(withText(player1Name)));
String player2Name = sharedPreferences.getString(context.getString(R.string.KEYplayerTwoDefaultNameSetting), context.getString(R.string.playerTwo));
onView(withId(R.id.LpCalculatorTextPlayer2Name)).check(matches(withText(player2Name)));
}
如果有任何帮助,这里是我的 Fragment 中访问 SharedPreferences 的代码
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getContext());
mLpCalculatorModel.setLpDefault(Integer.parseInt(preferences.getString(getString(R.string.KEYdefaultLpSetting), "8000")));
mLpCalculatorModel.setPlayer1Name(preferences.getString(getString(R.string.KEYplayerOneDefaultNameSetting), getString(R.string.playerOne)));
mLpCalculatorModel.setPlayer2Name(preferences.getString(getString(R.string.KEYplayerTwoDefaultNameSetting), getString(R.string.playerTwo)));
mLpCalculatorModel.setAllowsNegativeLp(preferences.getBoolean(getString(R.string.KEYallowNegativeLp), false));
tvPlayer1Lp.setText(Integer.toString(mLpCalculatorModel.getLpDefault()));
tvPlayer2Lp.setText(Integer.toString(mLpCalculatorModel.getLpDefault()));
getInstrumentation().getContext()
此 returns 一个 Context
代表您的 androidTest
源集。如果您的资源在其他地方(例如 main
),请使用:
getInstrumentation().getTargetContext()
我刚开始学习 Android 上的测试,这让我发疯。该功能运行良好,但我无法让我的测试达到 运行。我正在尝试从 SharedPreferences
中读取一个值并将其与 TextView 的内容进行比较。我在 Android Studio 2.3.3.
这一行 String player1Name = sharedPreferences.getString(context.getString(R.string.KEYplayerOneDefaultNameSetting), context.getString(R.string.playerOne));
导致了这个 android.content.res.Resources$NotFoundException: String resource ID #0x7f09004d
异常。这基本上与我在 Fragments 中用于访问共享首选项的代码相同。
我找不到任何引用相同问题的内容。我觉得我只是有一个简单的配置错误,但我无法弄清楚。提前致谢。
这是我的整个测试:
@Test
public void setsPlayerNamesFromSettings(){
Context context = getInstrumentation().getContext();
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
String player1Name = sharedPreferences.getString(context.getString(R.string.KEYplayerOneDefaultNameSetting), context.getString(R.string.playerOne));
onView(withId(R.id.LpCalculatorTextPlayer1Name)).check(matches(withText(player1Name)));
String player2Name = sharedPreferences.getString(context.getString(R.string.KEYplayerTwoDefaultNameSetting), context.getString(R.string.playerTwo));
onView(withId(R.id.LpCalculatorTextPlayer2Name)).check(matches(withText(player2Name)));
}
如果有任何帮助,这里是我的 Fragment 中访问 SharedPreferences 的代码
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getContext());
mLpCalculatorModel.setLpDefault(Integer.parseInt(preferences.getString(getString(R.string.KEYdefaultLpSetting), "8000")));
mLpCalculatorModel.setPlayer1Name(preferences.getString(getString(R.string.KEYplayerOneDefaultNameSetting), getString(R.string.playerOne)));
mLpCalculatorModel.setPlayer2Name(preferences.getString(getString(R.string.KEYplayerTwoDefaultNameSetting), getString(R.string.playerTwo)));
mLpCalculatorModel.setAllowsNegativeLp(preferences.getBoolean(getString(R.string.KEYallowNegativeLp), false));
tvPlayer1Lp.setText(Integer.toString(mLpCalculatorModel.getLpDefault()));
tvPlayer2Lp.setText(Integer.toString(mLpCalculatorModel.getLpDefault()));
getInstrumentation().getContext()
此 returns 一个 Context
代表您的 androidTest
源集。如果您的资源在其他地方(例如 main
),请使用:
getInstrumentation().getTargetContext()