【问题标题】:problem filling string[] with string-array from strings.xml使用 strings.xml 中的字符串数组填充字符串 [] 的问题
【发布时间】:2011-09-07 23:56:24
【问题描述】:

编辑:哇...不知何故我用另一个我问的问题替换了这个问题,很高兴有这个回滚功能

这个具体问题涉及来自我的previous question的getter

public class Impacts extends Activity implements View.OnClickListener
{
    boolean[] impactsb = new boolean[] {false, false, false, false, false, false, false, false}-
    public void onCreate (Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState)
...

    String getImpacts ()
    {
    String[] impactsn = new String[length];
    Resources myResources = this.getResources();
    impactsn = myResources.getStringArray(R.array.impacts);
    StringBuilder impactss = new StringBuilder();
    for (int i = 0; i < length; i ++)
        {
        if (impactsb[i])
            impactss.append(impactsn[i] + " | ");
        }
    if (String.valueOf(impactss) != "")
        impactss.insert(0, "Impacts: ");
    return String.valueOf(impactss);
    }

出现以下错误:

Impacts(ContextWrapper).getResources() line: 80
Impacts.getImpacts() line: 78

以下代码的最后一个括号:

@Override
public Resources getResources()
{
    return mBase.getResources();
}

和这行代码分别:

impactsn = getResources().getStringArray(R.array.impacts);

这是我的 strings.xml(无论如何都是相关部分)

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="impacts">
        <item>GasOilChemical Pollutants</item>
        <item>Ghost Fishing</item>
        <item>Marsh Damage</item>
        <item>Navigational Hazard</item>
        <item>Shellfish Damage</item>
        <item>Waste Pollution</item>
        <item>Wildlife Entanglement</item>
        <item>Other</item>
    </string-array>
</resources>

我最初的第一项是:

<item>Gas/Oil/Chemical Pollutants</item>

但修复了这个问题,希望如果不解决问题,至少会改变错误。但不,同样的错误。任何帮助将不胜感激,我对数组的使用并不十分熟悉,尤其是获取数组的资源。

Logcat 异常:

06-05 23:02:30.792: ERROR/AndroidRuntime(3905): FATAL EXCEPTION: main
06-05 23:02:30.792: ERROR/AndroidRuntime(3905): java.lang.NullPointerException
06-05 23:02:30.792: ERROR/AndroidRuntime(3905): at android.content.ContextWrapper.getResources(ContextWrapper.java:80)
06-05 23:02:30.792: ERROR/AndroidRuntime(3905): at com.citsci.mardeb.Impacts.getImpacts(Impacts.java:79)

【问题讨论】:

  • @hooraygradschool:getImpacts() 方法是 Activity 还是助手类的一部分?
  • 它是扩展活动的类的一部分,我将其添加到顶部以响应您的评论。
  • @hooraygradschool:好的,如果它是影响活动的一种方法,那么为什么要覆盖 getResources()?仅使用 getResources() 应该可以正常工作 - 尝试注释掉您覆盖的 getResources() 方法。
  • 哦,不,我看到你的困惑,overide 和那个块与Impacts(ContextWrapper).getResources() line: 80 一起使用,这不是我的代码的一部分,它不是平台或源代码的一部分或其他任何东西。抱歉,我不明白您的问题/将代码粘贴到此处时出错。
  • @hooraygradschool:好的,我现在明白了——我可以在 ContextWrapper 源代码中看到这一点。尝试将您的代码行分成两行以查看导致失败的原因,即 Resources myResources = getResources(); Impactn = myResources.getStringArray(R.array.impacts);

标签: android arrays string resources


【解决方案1】:

我知道这是糟糕的编码,提前道歉。所以为了解决这个问题,我搬家了

String[] impactsn;
impactsn = getResources().getStringArray(R.array.impacts);

到我的主要活动并使其成为静态。现在我在我的影响类中将它称为(MainActivity).impactsn[]

我知道这不是你应该在类之间共享对象的方式,但它似乎是迄今为止最简单的方式。这也是我后悔决定让我的所有标签单独活动的另一个原因。如果您对如何在不使用静态引用的情况下修复此代码或我的所有选项卡应该是相同活动的原因有任何建议或建议,请加入。

【讨论】:

    【解决方案2】:

    不应在 onCreate() 之前定义有关 UI 的任何内容。

    此外,以下是一个糟糕的编码示例,但它有效。

    public void onCreate(Bundle icicle){
         super.onCreate(icicle);
    ...
    ...
    ...
         COUNTRIES  = getResources().getStringArray(R.array.COUNTRIES_ARRAY);
    

    【讨论】:

    • super.onCreate(bundle) 在我的代码中的省略号内。我已经添加了它,所以很明显。我不确定这个答案对我的问题有什么影响。
    【解决方案3】:

    建议不要提前定义数组,不定义变量直接使用

    mAutoComplete.setAdapter (new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, getResources().getStringArray(R.array.OmskStreets)));
    

    还有更多..

    在课堂上

    private String[] mStreets = null;
    

    在 onCreate 方法中

    mStreets = getResources().getStringArray(R.array.OmskStreets);
    

    【讨论】:

      猜你喜欢
      • 2010-10-20
      • 1970-01-01
      • 1970-01-01
      • 2021-01-04
      • 2019-11-19
      • 2015-05-10
      • 1970-01-01
      • 2017-02-02
      相关资源
      最近更新 更多