Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Evgen2sat
19 / 19 / 7
Регистрация: 22.11.2011
Сообщений: 101
#1

Парсинг xml Android и открытие при нажатии ListView - Программирование Android

03.12.2013, 12:11. Просмотров 650. Ответов 0
Метки нет (Все метки)

Здравствуйте. Нашел пример парсинга xml и вывода в ListView http://androidituts.com/android-xml-parsing-tutorial/
При нажатии на строку ListView должна выводиться информация в новом активити, но вместо этого происходит ошибка и приложение закрывается. Как исправить?
Вот код:
AndroidXMLParsingActivity.class (главный класс)
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
public class AndroidXMLParsingActivity extends ListActivity { 
    static final String URL = "https://api.api2cart.com/v1.0/product.list.xml?api_key=6aed775211e8c3d556db063d12125d2d&store_key=6da0721ca4415c6116c0723777a51162&start=0&count=19&params=id,u_model,name,price,url,short_description"; 
    static final String KEY_ITEM = "product";
    static final String KEY_MODEL = "u_model"; 
    static final String KEY_NAME = "name"; 
    static final String KEY_URL_PRODUCT = "url"; 
    static final String KEY_SHORT_DESCRIPTION = "short_description";
    static final String KEY_PRICE = "price";
    static final String KEY_ID = "id";
 
    
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_android_xmlparsing); 
        
        
          
        ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>();
        XMLParser parser = new XMLParser(); 
        String xml = parser.getXmlFromUrl(URL); 
        Document doc = parser.getDomElement(xml); 
        NodeList nl = doc.getElementsByTagName(KEY_ITEM); 
        for (int i = 0; i < nl.getLength(); i++) { 
            HashMap<String, String> map = new HashMap<String, String>(); 
            Element e = (Element) nl.item(i); 
            map.put(KEY_NAME, "Название: " + parser.getValue(e, KEY_NAME));
            map.put(KEY_MODEL, "Модель: " + parser.getValue(e, KEY_MODEL));
            map.put(KEY_PRICE,  "Цена: " + parser.getValue(e, KEY_PRICE) + "руб.");
            map.put(KEY_SHORT_DESCRIPTION, "Описание: " + parser.getValue(e, KEY_SHORT_DESCRIPTION));
            map.put(KEY_URL_PRODUCT, "Ссылка: " + parser.getValue(e, KEY_URL_PRODUCT) + "&product_id=" + parser.getValue(e, KEY_ID));
            
            menuItems.add(map); } 
            ListAdapter adapter = new SimpleAdapter(this, menuItems, R.layout.list_item, new String[] { KEY_NAME, KEY_MODEL, KEY_PRICE, KEY_SHORT_DESCRIPTION, KEY_URL_PRODUCT }, new int[] { R.id.name, R.id.model, R.id.price, R.id.short_description, R.id.product_url }); 
            setListAdapter(adapter); 
            ListView lv = getListView(); 
            lv.setOnItemClickListener(new OnItemClickListener() { 
                @Override 
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    String name = ((TextView) view.findViewById(R.id.name)).getText().toString();
                    String model = ((TextView) view.findViewById(R.id.model)).getText().toString();
                    String price = ((TextView) view.findViewById(R.id.price)).getText().toString();
                    String url_product = ((TextView) view.findViewById(R.id.product_url)).getText().toString();
                    String short_description = ((TextView) view.findViewById(R.id.short_description)).getText().toString();
                    Intent in = new Intent(getApplicationContext(), SingleMenuItemActivity.class); 
                    in.putExtra(KEY_NAME, name); 
                    in.putExtra(KEY_MODEL, model); 
                    in.putExtra(KEY_PRICE, price);
                    in.putExtra(KEY_SHORT_DESCRIPTION, short_description); 
                    in.putExtra(KEY_URL_PRODUCT, url_product);
                    startActivity(in); 
 
                }
            });
              
    }
}
SingleMenuItemActivity.class
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class SingleMenuItemActivity extends Activity {
    static final String KEY_MODEL = "u_model"; 
    static final String KEY_NAME = "name"; 
    static final String KEY_URL_PRODUCT = "url"; 
    static final String KEY_SHORT_DESCRIPTION = "short_description";
    static final String KEY_PRICE = "price";
    static final String KEY_ID = "id";
    
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.single_item);
        Intent in = getIntent();
        String name = in.getStringExtra(KEY_NAME); 
        String model = in.getStringExtra(KEY_MODEL);
        String price = in.getStringExtra(KEY_PRICE);
        String short_description = in.getStringExtra(KEY_SHORT_DESCRIPTION);
        String url_product = in.getStringExtra(KEY_URL_PRODUCT); 
        TextView lblName = (TextView) findViewById(R.id.name_label);
        TextView lblModel = (TextView) findViewById(R.id.model_label); 
        TextView lblPrice = (TextView) findViewById(R.id.price_label); 
        TextView lblShort_description = (TextView) findViewById(R.id.short_description_label);
        TextView lblUrl_product = (TextView) findViewById(R.id.url_product_label);
        lblName.setText(name); 
        lblModel.setText(model); 
        lblPrice.setText(price);
        lblShort_description.setText(short_description);
        lblUrl_product.setText(url_product);
    }
 
}
XMLParser.class
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
public class XMLParser {
    public XMLParser() {
        
    }
    public String getXmlFromUrl(String url) { 
        String xml = null;
        try { 
            DefaultHttpClient httpClient = new DefaultHttpClient(); 
            HttpPost httpPost = new HttpPost(url); 
            HttpResponse httpResponse = httpClient.execute(httpPost); 
            HttpEntity httpEntity = httpResponse.getEntity(); 
            xml = EntityUtils.toString(httpEntity);
        }
        catch (UnsupportedEncodingException e) { 
            e.printStackTrace(); 
            } 
        catch (ClientProtocolException e) {
            e.printStackTrace(); 
            } 
        catch (IOException e) { 
            e.printStackTrace(); 
            }
        return xml;
    }
    public Document getDomElement(String xml) { 
        Document doc = null; 
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
        try {
            DocumentBuilder db = dbf.newDocumentBuilder(); 
            InputSource is = new InputSource(); 
            is.setCharacterStream(new StringReader(xml)); 
            doc = db.parse(is); 
            } 
        catch (ParserConfigurationException e) { 
            Log.e("Error: ", e.getMessage()); 
            return null; 
            } 
        catch (SAXException e) { 
            Log.e("Error: ", e.getMessage()); return null; 
            } 
        catch (IOException e) { 
            Log.e("Error: ", e.getMessage());
            return null; 
            } 
        return doc; 
        } 
    
    public final String getElementValue( Node elem ) { 
        Node child; 
        if( elem != null){ 
            if (elem.hasChildNodes()){ 
                for( child = elem.getFirstChild(); 
                        child != null; 
                        child = child.getNextSibling() ){ 
                    if( child.getNodeType() == Node.TEXT_NODE ){
                        return child.getNodeValue(); 
                        } 
                    } 
                } 
            }
        return ""; 
        }
 
    public String getValue(Element item, String str) { 
        NodeList n = item.getElementsByTagName(str);
        return this.getElementValue(n.item(0)); 
        } 
    }
single_item.xml
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
    <TextView android:id="@+id/name_label"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="25sp"
        android:textStyle="bold"
        android:paddingTop="10dip"
        android:textColor="#dc6800"/>
    
    <TextView android:id="@+id/model_label"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textColor="#acacac"/>
 
    <TextView android:id="@+id/price_label"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textStyle="bold"/>
    
    <TextView android:id="@+id/short_description_label"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textStyle="bold"/>
    
    <TextView android:id="@+id/url_product_label"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textStyle="bold"/>
</LinearLayout>
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2013, 12:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Парсинг xml Android и открытие при нажатии ListView (Программирование Android):

ListView: сбивается содержимое ImageView элемента при скроллинге + как сделать выделение пункта списка при нажатии? - Программирование Android
1. Есть свой класс ContactsSimpleCursorAdapter, в методе public void bindView(View view, Context context, Cursor c) которого происходит...

Открыть активити при нажатии на элемент Listview - Программирование Android
Здравствуйте, в андроид-программирование не давно, подскажите пожалуйста как, чтобы при нажатии на один элемент списка listview открывалась...

Белый фон при прокрутке listview и actionbar в android 2.1 - Программирование Android
При прокрутке ListView на Android 2.3 появляется белый фон. Ставил Cache Color Hint на прозрачный или на цвет фона, не помогает. Как это...

Как при нажатии на пункт ListView перейти на другую форму - Программирование Android
Здравствуйте! У меня возникла проблема при работе с ListView. Суть проблему заключается в следующем при нажатии одного из пункта нужно...

Android Studio при нажатии на btn - Программирование Android
Помогите пожалуйста O_o В Android Studio при нажатии на button можно ли сделать так, чтобы менялась изображение и звук, не создавая...

Изменил фон для Custom ListView не работает подсветка при нажатии - Программирование Android
Для каждого четного Custom ListView устанавливаю цвет фона : if ((position % 2)!=0) ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2013, 12:11
Привет! Вот еще темы с ответами:

Как изменить цвет пункта ListView при нажатии на него и сохранять его цвет при проматывании списка? - Программирование Android
Здравствуйте, подскажите, пожалуйста, как изменить цвет пункта ListView при нажатии на него и сохранять его цвет при проматывании списка? ...

При нажатии на элемент ListView вывести новое Activity с информацией об этом элементе - Программирование Android
Здравствуйте! Помогите пожалуйста! В общем есть список ListView с названиями кафе и ресторанов, надо сделать так чтобы при нажатии на...

Смена надписи при нажатии кнопки XML - Программирование Android
Добрый день. Пишу небольшую программку в Android Studio 1.0. Есть кнопка, описанная в XML. Необходимо, что бы при нажатии на неё объекту...

Android virtual device. При нажатии на "Ок" ничего не происходит - Программирование Android
Всем привет! проблема с созданием виртуального устройства, установил adt скачал сдк, установил компоненты. Создаю устройство, кнопка ок...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru