JavaRush /Java блог /Архив info.javarush /нужна помощь по android
Samson
19 уровень

нужна помощь по android

Статья из группы Архив info.javarush
суть проблемы, есть layout, в котором запускается SAX парсер, и с инета вытягивает данные курсы валют. когда добавляю в ListView прога не запускается, а когда вывожу в консоль даные есть, помогите пожалуйста найти где ошибка. (XML образец для ListView создал это my_list_items_currensy) public class ShowAllActivity extends AppCompatActivity { private ArrayList finalList; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.list_layout); SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); try { URL url = new URL("http://resources.finance.ua/ua/public/currency-cash.xml"); InputStream stream = url.openStream(); SAXParser saxParser = saxParserFactory.newSAXParser(); // creating a SAX parser Handler handler = new Handler(); saxParser.parse(stream,handler); // here we parse our resource finalList = handler.getListOfAllCurrencies(); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } adapterList(); } public void adapterList(){ ArrayAdapter arrayAdapter = new ListOfAllCurrency(); ListView listView=(ListView)findViewById(R.id.c_list); listView.setAdapter(arrayAdapter); } public class ListOfAllCurrency extends ArrayAdapter { public ListOfAllCurrency() { super(ShowAllActivity.this,R.layout.my_list_items_currensy,finalList); } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = convertView; if( view==null){ view = getLayoutInflater().inflate(R.layout.my_list_items_currensy,parent,false); } TextView bankName = (TextView)view.findViewById(R.id.bankName); TextView currency = (TextView)view.findViewById(R.id.currency); TextView bay = (TextView)view.findViewById(R.id.bay); TextView sell = (TextView)view.findViewById(R.id.sell); bankName.setText(finalList.get(position).getBankName()); StringBuilder itemsString = new StringBuilder(); int lengthListOfCurrency = finalList.get(position).getList().size(); for(int i=0;i
Комментарии (12)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
LostMichael1987 Уровень 41
27 сентября 2016
Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
Ошибка в ShowActivity.onCreate. Инициализировать лист нужно до setContentView, т.к. то, чем ты его инициализируешь, не успевает распарситься.
Сделай ASyncTask все же, его проще реализовать чем Loader, куда в doInBackground помести весь код распарсивания, кроме последней строчки, а в onPostExecute пускай возвращает лист handler.getListOfAllCurrencies(). Такие вещи как парсинг рекомендуется делать в отдельной нити.
LostMichael1987 Уровень 41
26 сентября 2016
Что за ошибка вылетает, стек трейс? Наугад скажу, что у тебя данные парсятся при создании view, не успев распарситься уже грузятся в layout.
Парсер лучше запускать в отдельном треде, используй для этого ASyncTask(сейчас не рекомендуется, но если проект учебный или тестовый, то можно) или Loader.
p.s. ListView тоже сейчас чаще заменяется RecyclerView — то же самое что ListView, но с обязательным ViewHolder`ом.
Samson Уровень 19
26 сентября 2016
это образец my_list_items_currensy