首页 > 解决方案 > Android忽略runOnUiThread中语言文件中的字符串

问题描述

在我的活动开始时,我正在设置用户的语言:

//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());

然而,这对我的应用程序中的所有内容都很好,也适用于包括 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 是从原始语言中获取字符串,而不是用户定义的。所以整个活动都在使用用户的语言,除了这个可运行的。

你能告诉我这里有什么问题吗?

标签: androidrunnable

解决方案


R.string.some_string

是一个公共的最终静态 int,它是 R.java 文件中特定字符串的固定 ID。这是自动生成的。

getString(R.string.some_string)

通过读取R.java文件返回上面引用的String。

所以我建议你在你的应用程序中使用第二种方法从资源文件中获取字符串。

要解决您的问题,您可以使用

getResources().getString(R.string.Nodata)

推荐阅读