-2

xml解析を使用してAndroidリストビューを開発する必要があります。

mysqlサーバーからxmlフィードを取得しています。製品は日々のアクティビティに追加されます。

ここで私は3種類のリストビューが必要です:

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

fistviewでは、Categorynameのみを表示する必要があります。

私のxmlフィードから最初のビューを表示する必要があります

カテゴリ名のみ

2番目のビュー

Categorynameに属するサブカテゴリ名を表示する必要があります。

3番目のビューで:

製品名を表示する必要があり、価格はサブカテゴリ名に属しています。

これは私の最初のビューコードです:

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));
               }  


     });

    }

         }

ここでは、カテゴリリストを1番目のビューに表示しています。また、カテゴリIDを1番目のビューから2番目のビューに渡します。

これは私の2番目のビューコードです:

       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);
        }  

     });

2番目のビューでcategoryid値が表示され、1番目のアクティビティから取得します。ただし、リンクするIDは、サブカテゴリリストを取得しないことを意味します。これらの解決策を教えてください。

例:

これは私のサブカテゴリのリンクです:

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

サブカテゴリリストを表示したことを意味します。

ここでは、そのカテゴリID 10(categoryid = 10)を最初から2番目に渡して、テキストビューに保存する必要があります。

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

リンクでこれらのmTitle値を呼び出す必要があります。これは、サブカテゴリリストに表示されないことを意味します。助けてください。

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

私のコードの何が問題になっていますか。どのようにしてそのcategoryidを私のURLに呼び出すことができますか。これらの解決策を教えてください。

編集:

これは私のURLです:

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

私が直接言及したcategoryid=10は、すべての製品を無効にしたことを意味します。

しかし、私はこのURLを次のように変更する必要があります:

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

カテゴリID="+ mTitle +"のようにURLを変更したので、すべての製品が表示されないことを意味します。

mTitleの価値は、私の以前の活動から得られています。

私のコードの何が問題なのですか。

私のmTitle値は10です。私は手段のようなコードを書かなければなりません

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

表示されたmTitle値は正常に表示されます。

grandtotal.setText("Welcome ," + URL );私にnull値を与えたことを意味します

4

2 に答える 2

1

domパーサーの代わりにsaxパーサーを使用することをお勧めします。

このリンクはあなたに役立ちます。 これを読む。

于 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 に答える