hashmap dans l'analyse android xml [java]


Answers

Ici, dans cette ligne map.put( KEY_ARTICLE,((Element)nl1.item(j)).getAttribute("title")); vous êtes en train d'écrire la valeur précédente présente sur la carte. Changez ArrayList<HashMap<String, String>> songsList à ArrayList<HashMap<String, List<String>>> songsList et ajoutez chaque valeur à la liste et placez-la sur la carte.
Même si vous faites cela, vous obtiendrez une sortie en tant que,

Books    
Android Java PHP MySQL Dita Frieda Demi Shyamalan Krish     
Names     
Android Java PHP MySQL Dita Frieda Demi Shyamalan Krish 

Pour obtenir la sortie désirée, vous devriez considérer la nodelist pour l' article sous chaque Category au lieu d'obtenir toutes les étiquettes d' article dans le document.

Question

Je dois aller chercher les données du flux XML et afficher sur l'application Android.

mon flux xml ressemble à:

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

Ici, je dois afficher le nom de la catégorie. Je dois également afficher le titre de l'article pour la catégorie d'appartenance.Je souhaite afficher la sortie est:

      Books

      Android  Java  PHP  MySql

     Names

     Dita  Frieda  Demi  Shyamalan Krish

J'ai utilisé le code ci-dessous:

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

Ici, je dois lancer l'application signifie que le titre de l'article est affiché.Mais le titre de l'article ne s'affiche pas correctement.mon actuelle o / p ressemble à ci-dessous:

     Books

      Krish  Krish  

     Names

     Krish  Krish 

Le titre du dernier article est affiché sur toutes les catégories. Pourquoi ces erreurs se produisent ??? s'il vous plaît aidez-moi ... comment puis-je résoudre ces erreurs ??? S'il vous plaît, donnez-moi quelques idées ???

MODIFIER:

J'ai changé mon code comme ci-dessous:

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

Maintenant, je dois exécuter l'application signifie que je reçois l'o / p comme ci-dessous:

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

les pls me fournissent une idée pour obtenir le bon o / p (ma conception nécessaire).

C'est mon fichier 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;
            }

C'est la classe 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;
            }