【问题标题】:xml parsing listview in android like category,subcategoryandroid中的xml解析listview类似类别,子类别
【发布时间】:2012-12-26 05:16:51
【问题描述】:

我必须使用xml解析开发android listview。,

我正在从 mysql 服务器获取 xml 提要。该产品被添加到日常活动中。

这里我需要 3 种列表视图:

1st view:   Category
2nd view:  SubCategory
3rd view:   Product

在 fistview 中必须单独显示 Categoryname。

从我的 xml 提要 第一个视图 必须显示

类别名称单独

第二视图中:

必须显示属于 Categoryname 的 subcategoryname

第三视图中:

必须显示产品名称和价格属于子类别名称。

这是我的第一个视图代码:

public class MainActivity extends Activity {
static final String URL =http://api1.sfsfsfsf.com/dev/categories/?fields=&categoryid=3&access_token=bfb787a6e

        static String KEY_CATEGORY = "category";

       static final String KEY_TITLE = "categoryName";
        static final String KEY_SUBCATE = "categoryId";

 ListView lview3;
 LazyAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
    XMLParser parser = new XMLParser();
        String xml = parser.getXmlFromUrl(URL); // getting XML from URL
        Document doc = parser.getDomElement(xml); // getting DOM element

        NodeList nl = doc.getElementsByTagName(KEY_CATEGORY);

        // looping through all song nodes &lt;song&gt;
        for (int i = 0; i < nl.getLength(); i++) {
            // creating new HashMap
            HashMap<String, String> map = new HashMap<String, String>   ();
            Element e = (Element) nl.item(i);


            map.put(KEY_TITLE, parser.getValue(e, KEY_TITLE));
           map.put(KEY_SUBCATE, parser.getValue(e, KEY_SUBCATE));             
        songsList.add(map);
        }
    lview3 = (ListView) findViewById(R.id.listView1);
    adapter = new LazyAdapter(this, songsList);
    lview3.setAdapter(adapter);

    lview3.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
           HashMap<String, String> map = songsList.get(position);
            Intent in = new Intent(
                    MainActivity.this,
                     com.example.androidcartxml.SubCate.class);
            in.putExtra(KEY_TITLE, map.get(KEY_TITLE));
            in.putExtra(KEY_SUBCATE, map.get(KEY_SUBCATE));
               }  


     });

    }

         }

这里我在第一个视图中显示了类别列表。还将 categoryid 从第一个视图传递到第二个视图。

这是我的第二次查看代码:

       public class SubCate extends Activity {
         String mTitle;

         static final String URL = "http://api1.sfsfsff.com/dev/categories/?fields=&categoryid="+mTitle+"&access_token=bfb787a6e11";
            static String KEY_CATEGORY = "category";

              static final String KEY_TITLE = "categoryName";
             static final String KEY_NAME ="categoryId";
             static final String KEY_SUBCATE = "categoryId";
 ListView lview3;
 ListViewCustomAdapter adapter;
 @Override
 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.subcate);
    Bundle b = getIntent().getExtras();
    //String s= getIntent().getStringExtra("orderid");
    mTitle = b.getString(KEY_SUBCATE);
    TextView grandtotal = (TextView) findViewById(R.id.subcate);
    grandtotal.setText("Welcome ," + mTitle );
    final ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();

   // String key = getIntent().getStringExtra(KEY_TITLE);

        XMLParser parser = new XMLParser();
        String xml = parser.getXmlFromUrl(URL); // getting XML from URL
        Document doc = parser.getDomElement(xml); // getting DOM element

        NodeList nl = doc.getElementsByTagName(KEY_CATEGORY);

        // looping through all song nodes &lt;song&gt;
        for (int i = 0; i < nl.getLength(); i++) {
            // creating new HashMap
            HashMap<String, String> map = new HashMap<String, String>();
            Element e = (Element) nl.item(i);
            // adding each child node to HashMap key =&gt; value

            map.put(KEY_TITLE, parser.getValue(e, KEY_TITLE));
            map.put(KEY_NAME, parser.getValue(e, KEY_NAME));
            songsList.add(map);
        }
    lview3 = (ListView) findViewById(R.id.listView1);
    adapter = new ListViewCustomAdapter(this, songsList);
    lview3.setAdapter(adapter);

    lview3.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            HashMap<String, String> map = songsList.get(position);
            Intent in = new Intent(
                    SubCate.this,
                     com.example.androidcartxml.Catalogue.class);

            in.putExtra(KEY_TITLE, map.get(KEY_TITLE));
            in.putExtra(KEY_NAME, map.get(KEY_NAME));
        //  in.putExtra(KEY_THUMB_URL, map.get(KEY_THUMB_URL));
            //in.putExtra(KEY_PRICE, map.get(KEY_PRICE));
            startActivity(in);
        }  

     });

在第二个视图中显示了 categoryid 值,从第一个活动中获取它。但我不得不提到链接的 id 意味着没有得到子类别列表。请给我一些解决方案。

例如:

这是我的子类别链接:

[http://api1.sfsfsffsf.com/dev/categories/?fields=&categoryid=10&access_token=bfb787a6e1][1]

表示已显示子类列表。

在这里,我必须将类别 id 10(categoryid=10) 从第一个传递到第二个并将其保存到 textview。

    mTitle = b.getString(KEY_SUBCATE);
    TextView grandtotal = (TextView) findViewById(R.id.subcate);
       grandtotal.setText("Welcome ," + mTitle );

我必须在我的链接上调用这些 mTitle 值,这意味着它不会显示在 subcategorylist 上。请帮助我。

[http://api1.sfsfsff.com/dev/categories/?fields=&categoryid="+mTitle+"&access_token=bfb787a6][2]

我的代码有什么问题。如何将该 categoryid 调用到我的网址。请给我解决方案。

编辑:

这是我的网址:

[http://api1.sfsfsfsf.com/dev/categories/?fields=&categoryid=10&access_token=bfb787a6e][3]

我直接提到categoryid=10 表示已显示所有产品。

但我必须更改此网址,例如:

[http://api1.sfsfsf.com/dev/categories/?fields=&categoryid="+mTitle+"&access_token=bfb787a6e17][4]

我已经更改了我的 url,比如 categoryid="+mTitle+" 意味着没有显示所有产品。

mTitle 值来自我之前的活动。

我的代码有什么问题。

我的 mTitle 值是 10。我必须像手段一样编写代码

grandtotal.setText("Welcome ," + mTitle );

它的 mTitle 值显示成功。

grandtotal.setText("Welcome ," + URL ); 表示给了我空值

【问题讨论】:

  • 在第二个视图中获取列表视图与第一个视图相同
  • @DipakKeshariya 在第二个视图中:我必须在我的第一个视图上单击书籍意味着我将转到下一个活动必须在第二个视图上显示 Internet 软件或者我必须在我的第一个视图上单击 CD-DVD-Video视图意味着将进入第二个视图也必须显示但我必须运行应用程序并单击书籍意味着我将所有子类别显示在第二个视图上。 CD DVD 音频
  • 我已经给你发了源代码。
  • 查看我的更新答案并回复我是否对您有帮助。
  • @user1897014 抱歉,亲爱的,我只是提到如何使用 sax 解析器读取 xml 响应。现在您更改了您的要求。好的,谢谢您的反馈。但在这里我建议您,如何显示是您的挑战在单独的列表中。再次感谢您的反馈。

标签: java android android-listview


【解决方案1】:

我建议使用 sax 解析器而不是 dom 解析器。

此链接对您有帮助。 read this.

【讨论】:

  • 在 android listview 中给我示例解析
  • 对不起亲爱的迟到了,但这里你的代码可以解决你的问题。 pastie.org/5579468
  • 现在只有我得到了明确的要求。请阅读我更新的问题并为我提供解决方案。
  • 抱歉,亲爱的,我只是提到如何使用 sax 解析器读取 xml 响应。现在您更改了您的要求。好的,感谢您的反馈。但是在这里我建议您,如何单独显示 iin 是您的挑战列表。再次感谢您的反馈..
【解决方案2】:

在这里我首先调用了 URL,然后只声明了 mTitle 值。这就是我在这里遇到问题的原因。

现在我得到了解决方案:

我先声明了 mTitle,之后只调用了如下所示的 URL。

 mTitle = b.getString(KEY_SUBCATE);

 URL = "http://api1.sfsfsffsf.com/dev/categories/?fields=&categoryid=" + mTitle +       "&access_token=bfb787a";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    • 2021-01-07
    • 1970-01-01
    • 2015-06-17
    • 1970-01-01
    相关资源
    最近更新 更多