проблема с заполнением строки [] строковым массивом из strings.xml - PullRequest
2 голосов
/ 03 июня 2011

РЕДАКТИРОВАТЬ: вау ... каким-то образом я заменил этот вопрос на другой вопрос, который я спрашивал, рад, что есть эта функция отката

этот конкретный вопрос касается геттера из моего предыдущий вопрос

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)

Ответы [ 3 ]

4 голосов
/ 06 июня 2011

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

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

в основной вид деятельности и сделал его статичным.теперь я ссылаюсь на него в своем классе Impacts как (MainActivity).impactsn[]

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

1 голос
/ 10 августа 2011

предлагают не определять массив заранее и использовать напрямую, без определения переменной

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);
0 голосов
/ 11 июля 2011

Не должно ничего определять в UI до onCreate ().

Кроме того, ниже приведен пример плохого кодирования, но он работает.

public void onCreate(Bundle icicle){
     super.onCreate(icicle);
...
...
...
     COUNTRIES  = getResources().getStringArray(R.array.COUNTRIES_ARRAY);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...