-2

我必须使用 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 调用到我的 url中。请给我解决方案。

编辑:

这是我的网址:

[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]

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

mTitle 价值来自我以前的活动。

我的代码有什么问题。

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

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

其显示的 mTitle 值成功。

grandtotal.setText("Welcome ," + URL );意味着给了我空值

4

2 回答 2

1

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

这个链接对你有帮助。 读这个。

于 2012-12-26T05:20:56.337 回答
-1

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

现在我得到了解决方案:

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

 mTitle = b.getString(KEY_SUBCATE);

 URL = "http://api1.sfsfsffsf.com/dev/categories/?fields=&categoryid=" + mTitle +       "&access_token=bfb787a";
于 2012-12-28T08:46:31.810 回答