суть проблемы, есть 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
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Ошибка в ShowActivity.onCreate. Инициализировать лист нужно до setContentView, т.к. то, чем ты его инициализируешь, не успевает распарситься.
Сделай ASyncTask все же, его проще реализовать чем Loader, куда в doInBackground помести весь код распарсивания, кроме последней строчки, а в onPostExecute пускай возвращает лист handler.getListOfAllCurrencies(). Такие вещи как парсинг рекомендуется делать в отдельной нити.
Парсер лучше запускать в отдельном треде, используй для этого ASyncTask(сейчас не рекомендуется, но если проект учебный или тестовый, то можно) или Loader.
p.s. ListView тоже сейчас чаще заменяется RecyclerView — то же самое что ListView, но с обязательным ViewHolder`ом.