Android 在 runOnUiThread 中忽略语言文件中的字符串
Android ignoring string from language file in runOnUiThread
在我的 activity 开始时,我正在设置用户的语言:
//lng is user language
Locale locale = new Locale(lng);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
然而,这对我的应用程序中的所有内容都适用,也适用于整个 activity,包括 Asynctask、doInBackground 等
但是在 AsyncTask 中我有一个例外:
catch (final JSONException e) {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(activity.getApplicationContext(),
R.string.Nodata,
Toast.LENGTH_LONG).show();
}
}); }
在 runOnUiThread 中,R.string.Nodata 从原始语言获取字符串,而不是用户定义的。所以整个 activity 都在使用用户的语言,除了这个可运行的。
请问这里有什么问题吗?
R.string.some_string
是一个 public 最终静态整数,它是 R.java 文件中特定字符串的固定 ID。这是自动生成的。
getString(R.string.some_string)
returns上面通过读取R.java文件引用的String。
所以我建议您在您的应用中使用第二种方法从资源文件中获取字符串。
要解决您的问题,您可以使用
getResources().getString(R.string.Nodata)
在我的 activity 开始时,我正在设置用户的语言:
//lng is user language
Locale locale = new Locale(lng);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
然而,这对我的应用程序中的所有内容都适用,也适用于整个 activity,包括 Asynctask、doInBackground 等
但是在 AsyncTask 中我有一个例外:
catch (final JSONException e) {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(activity.getApplicationContext(),
R.string.Nodata,
Toast.LENGTH_LONG).show();
}
}); }
在 runOnUiThread 中,R.string.Nodata 从原始语言获取字符串,而不是用户定义的。所以整个 activity 都在使用用户的语言,除了这个可运行的。
请问这里有什么问题吗?
R.string.some_string
是一个 public 最终静态整数,它是 R.java 文件中特定字符串的固定 ID。这是自动生成的。
getString(R.string.some_string)
returns上面通过读取R.java文件引用的String。
所以我建议您在您的应用中使用第二种方法从资源文件中获取字符串。
要解决您的问题,您可以使用
getResources().getString(R.string.Nodata)