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

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

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

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

03.12.2013, 12:11. Просмотров 641. Ответов 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>
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2013, 12:11     Парсинг xml Android и открытие при нажатии ListView
Посмотрите здесь:
Android Открыть активити при нажатии на элемент Listview
Белый фон при прокрутке listview и actionbar в android 2.1 Android
Android Как при нажатии на пункт ListView перейти на другую форму
Android Studio при нажатии на btn Android
Изменил фон для Custom ListView не работает подсветка при нажатии Android
Android При нажатии на элемент ListView вывести новое Activity с информацией об этом элементе
Смена надписи при нажатии кнопки XML Android
Парсинг XML Android
Android Парсинг XML
Android Парсинг XML
Парсинг XML Android
Android Listview Scroll Android

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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