2

xml フィードからデータを取得し、Android アプリケーションに表示する必要があります。

私のxmlフィードは次のようになります:

<root>
 <Categories>
  <Category name="Books">
   <Articles>
  <article articleid="4537" title="Android" />
  <article articleid="4560" title="Java" />
   <article articleid="4585" title="PHP" />
   <article articleid="4731" title="MySql" />
  </Articles>
 </Category>
  <Category name="Names">
   <Articles> 
      <article articleid="266" title="Dita" />
       <article articleid="268" title="Frieda" />
        <article articleid="269" title="Demi" />
        <article articleid="271" title="Shyamalan" />
          <article articleid="269" title="Krish" /></Articles>
         </Category>
          </Categories></root>

ここでは、カテゴリ名を表示する必要があります。また、所属するカテゴリの記事のタイトルを表示する必要があります。出力を表示したいのは次のとおりです。

      Books

      Android  Java  PHP  MySql

     Names

     Dita  Frieda  Demi  Shyamalan Krish

私は以下のコードを使用しています:

static final String KEY_TITLE = "Category";
   static final String KEY_ARTICLE = "article";
      @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_TITLE);
        NodeList nl1 = doc.getElementsByTagName(KEY_ARTICLE);
                System.out.println(nl.getLength());
        // looping through all song nodes &lt;song&gt;
        for (int i = 0; i < nl.getLength(); i++) {
            // creating new HashMap
            System.out.println(nl.getLength());
            HashMap<String, String> map = new HashMap<String, String>   ();
            map.put( KEY_TITLE,((Element)nl.item(i)).getAttribute("name"));
           for (int j = 0; j < nl1.getLength(); j++) {
              map.put( KEY_ARTICLE,((Element)nl1.item(j)).getAttribute("title"));
                }
           songsList.add(map);
          }

ここでアプリを実行する必要があるということは、記事のタイトルが表示されることを意味します。しかし、記事のタイトルが正しく表示されません。現在の o/p は次のようになっています。

     Books

      Krish  Krish  

     Names

     Krish  Krish 

すべてのカテゴリで最新の記事タイトルが表示されます。なぜこのエラーが発生するのですか?助けてください...どうすればこれらのエラーを解決できますか??? アイデアを教えてください???

編集:

以下のようにコードを変更しました。

     public class MainActivity extends Activity {
      static final String URL = "xxx";

 static final String KEY_TITLE = "Category";
 static final String KEY_ARTICLE = "article";
 static final String KEY_IMAGE = "image";
 LazyAdapter adapter;

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

     final ArrayList<HashMap<String, List<String>>> songsList = new ArrayList<HashMap<String, List<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_TITLE);
        NodeList nl1 = doc.getElementsByTagName(KEY_ARTICLE);
        NodeList nl2 = doc.getElementsByTagName(KEY_IMAGE);
        System.out.println(nl.getLength());
        HashMap<String, List<String>> map = new HashMap<String, List<String>>();
        for(int i = 0; i < nl.getLength(); i++) {
            String name = ((Element) nl.item(i)).getAttribute("name");
             populateMap(map, name, KEY_TITLE);

           for(int j = 0; j < nl1.getLength(); j++) {
                String title=((Element) nl1.item(j)).getAttribute("title");
                populateMap(map, title, KEY_ARTICLE);
                String url=((Element) nl2.item(j)).getAttribute("url");
                populateMap(map, url, KEY_IMAGE);
                } 
           songsList.add(map); 
       } 
    GridView list = (GridView) findViewById(R.id.listView1);
         adapter = new LazyAdapter(this, songsList);
         list.setAdapter(adapter);
   private void populateMap(HashMap<String, List<String>> map, String value,
        String key) {
    // TODO Auto-generated method stub
     List<String> myList;
     if(!map.containsKey(key)) {
         myList = new ArrayList<String>();
         myList.add(value);
         map.put(key, myList);
     } else {
         myList = map.get(key);
         myList.add(value);
     }

今、私は以下のようなo / pを取得していることを意味するアプリを実行する必要があります:

[Books,Names]
[Android,Java,PHP,Mysql,Dita,Frieda,Demi,Shyamalan,Krish]  [Android,Java,PHP,Mysql,Dita,Frieda,Demi,Shyamalan,Krish]

[Books,Names]
[Android,Java,PHP,Mysql,Dita,Frieda,Demi,Shyamalan,Krish]  [Android,Java,PHP,Mysql,Dita,Frieda,Demi,Shyamalan,Krish]

pls は、正しい o/p (必要な設計) を取得するためのアイデアを提供してくれます。

これは私の LazyAdpter ファイルです:

         public class LazyAdapter extends BaseAdapter {
            private Activity activity;
            private ArrayList<HashMap<String, List<String>>> data;
            private static LayoutInflater inflater = null;
           public ImageLoader imageLoader;
          ListAdapter listViewAdapter;
            public LazyAdapter(Activity a, ArrayList<HashMap<String, List<String>>> songsList) {
                   activity = a;
                  data = songsList;
                  inflater = (LayoutInflater) activity
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                            imageLoader = new ImageLoader(activity.getApplicationContext());
                }

        public int getCount() {
                    return data.size();
                   }

             public Object getItem(int position) {
              return position;
            }

         public long getItemId(int position) {
            return position;
            }

            public View getView(int position, View convertView, ViewGroup parent) {
            View vi = convertView;
                vi = inflater.inflate(R.layout.list_row,parent, false);


                TextView title = (TextView) vi.findViewById(R.id.title); 
                Gallery listview = (Gallery) vi .findViewById(R.id.model);

            HashMap<String, List<String>> item = new HashMap<String, List<String>>();
             item = data.get(position);
             title.setText(item.get(MainActivity.KEY_TITLE).toString());
                  listViewAdapter = new ListAdapter(activity, data);
                 listview.setAdapter(listViewAdapter);
                     return vi;
            }

これは ListAdapter クラスです:

      public View getView(int position, View convertView, ViewGroup parent) {
           View vi = convertView;
            vi = inflater.inflate(R.layout.listrow,parent, false);
            TextView title = (TextView) vi.findViewById(R.id.textView1); 
            HashMap<String, List<String>> item = new HashMap<String, List<String>>();
            item = data.get(position);
        title.setText(item.get(MainActivity.KEY_ARTICLE).toString());
         return vi;
            }
4

2 に答える 2