Как преобразовать из массива ArrayList в массив массивов - PullRequest
5 голосов
/ 07 ноября 2011

// edit: я изменил свое преобразование ArrayList, но не могу загрузить второй счетчик

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

*** У меня это отмеченоИсключение нулевого указателя кода 11-06 19: 03: 34.050: WARN / System.err (5342): при полученииAmazonXMLDataActivity.onCreate (RetrievingAmazonXMLDataActivity.java:88)

// отредактированный код

for (int i = 0; i < tokens.length; i++) {
            String a = dumpTitles("ProductName", i);
            element = a.split("!");
            allProducts.add(element);
        }

       w =  (String[][])allProducts.toArray(new String[allProducts.size()][]);


Spinner spinnerProducts = (Spinner) findViewById(R.id.spinner2);
        spinnerProducts.setOnItemSelectedListener(this);

// ** строка ошибки ниже

 ArrayAdapter<String> productsArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, productArrayToShow);

       productsArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinnerProducts.setAdapter(productsArrayAdapter);

 public void onItemSelected(AdapterView<?> parent, View v, int position, long id)
    {

        try {
            selected = parent.getItemAtPosition(position).toString();


            productArrayToShow = w[position];

        } catch (Exception e) {}
    }

// исходный код

ArrayList<String[]>allProducts = new ArrayList<String[]>();
    for (int i = 0; i < tokens.length; i++) {
        String a = dumpTitles("ProductName", i);
        element = a.split("!");
        allProducts.add(element);
    }


    String[][] w; = new String[allProducts.size()][];
        for (int a = 0; a<allProducts.size(); a++) {
            w[a] = (String[])allProducts.toArray(new String[allProducts.size()]);
        }

Ответы [ 4 ]

6 голосов
/ 07 ноября 2011

Почему не просто

String[][] w = allProducts.toArray(new String[][] {});
5 голосов
/ 07 ноября 2011

Похоже, вы изменили свое мнение о том, как вы собираетесь делать преобразование на полпути.Ваш код выглядит примерно так:

String[][] w = new String[allProducts.size()][];
for (int a = 0; a<allProducts.size(); a++) {
  w[a] = allProducts.get(a);
}

и немного так:

String[][] w = allProducts.toArray(new String[allProducts.size()][]);

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

1 голос
/ 07 ноября 2011

Я думаю, что вы можете обойтись только этим:

String[][] w = allProducts.toArray(new String[allProducts.size()]);
0 голосов
/ 07 ноября 2011

Сделайте их из одного и того же типа данных «ArrayList» и «Array of Strings», они не имеют один и тот же тип данных, поэтому они не будут сопоставимы друг с другом.И, пожалуйста, прокомментируйте, где проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...