0

JSoupで2つのforループを実行することにより、Webサイトから2つの要素(TDタグ)を解析します。次のように、リストビューで並べて表示してもらいたいです。

naam: waarde 
naam: waarde 

ただし、これらは、CustomBaseAdapterによって入力されるリストビューにこのように表示されます。

naam: 
naam: 
naam: 
waarde 
waarde 
waarde 

誰かが私がこれを成し遂げるのを手伝ってくれませんか?これは私をしばらくの間やめるのに忙しくしています。

他の提案も歓迎します、ありがとう。

リスト「naam」と「waarde」が入力される2つのforループ:

 Document doc = Jsoup.parse(kpn);  
   Elements tdsFromSecondColumn = doc.select("table.personaltable td:eq(0)"); 
   Elements tdsFromSecondColumn1 = doc.select("table.personaltable td:eq(1)"); 
   SearchResults sr1 = new SearchResults(); 

      for (Element tdFromSecondColumn : tdsFromSecondColumn) {                            
           sr1 = new SearchResults(); 
           sr1.setNaam(tdFromSecondColumn.text()); 
           results.add(sr1); 
      } 

      for (Element tdFromSecondColumn1 : tdsFromSecondColumn1) {                              
           sr1 = new SearchResults(); 
           sr1.setWaarde(tdFromSecondColumn1.text()); 
           results.add(sr1); 
      } 

私はそれがこのようなものであるべきだと知っていますが、どうやって?:

for (Element tdFromSecondColumn : tdsFromSecondColumn) {                             
     sr1 = new SearchResults();  
     sr1.setNaam(tdFromSecondColumn.text());  
     sr1.setWaarde(tdFromSecondColumn1.text());
     results.add(sr1);  

}

これが私のCustomeBaseAdapterです:

public class MyCustomBaseAdapter extends BaseAdapter { 

private static ArrayList<SearchResults> searchArrayList; 

private LayoutInflater mInflater; 


  public MyCustomBaseAdapter(Context context, ArrayList<SearchResults> results) { 
  searchArrayList = results; 
  mInflater = LayoutInflater.from(context); 
  } 


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

public Object getItem(int position) { 
  return searchArrayList.get(position); 
} 

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

public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder; 
  if (convertView == null) { 
    convertView = mInflater.inflate(R.layout.test, null); 
    holder = new ViewHolder(); 
    holder.txtNaam = (TextView) convertView.findViewById(R.id.naam); 
    holder.txtWaarde = (TextView) convertView.findViewById(R.id.waarde); 

    convertView.setTag(holder); 
   } else { 
 holder = (ViewHolder) convertView.getTag(); 
 } 

 holder.txtNaam.setText(searchArrayList.get(position).getNaam()); 
 holder.txtWaarde.setText(searchArrayList.get(position).getWaarde()); 

 return convertView; 
} 

static class ViewHolder { 
  TextView txtNaam; 
  TextView txtWaarde; 
} 


} 

編集:私は今このような何かを持っていますが、例外インデックスサイズ12を取得します:

public ArrayList<SearchResults> GetSearchResults(){

          ArrayList<SearchResults> results = new ArrayList<SearchResults>();
          ArrayList<SearchResults> results1 = new ArrayList<SearchResults>();
          ArrayList<SearchResults> results2 = new ArrayList<SearchResults>();

          Document doc = Jsoup.parse(kpn);  
          Elements tdsFromSecondColumn = doc.select("table.personaltable td:eq(0)");
          Elements tdsFromSecondColumn1 = doc.select("table.personaltable td:eq(1)");

          SearchResults sr1 = new SearchResults();
          SearchResults sr2 = new SearchResults();


          for (Element tdFromSecondColumn : tdsFromSecondColumn) {                             
               sr1 = new SearchResults();  
               sr1.setNaam(tdFromSecondColumn.text());  
               results.add(sr1);  
          }  

          for (Element tdFromSecondColumn1 : tdsFromSecondColumn1) {                               
               sr2 = new SearchResults();  
               sr2.setWaarde(tdFromSecondColumn1.text());  
               results1.add(sr2);  
          }  

          for (int i = 0; i < results.size();i++) { 
              results.add(results.get(i));
              results2.add(results1.get(i)); 
            } 

          return results2;

         }
     }

Edit2:例外はなくなりましたが、results1 ia setWaardeの結果のみが表示されます:

public ArrayList<SearchResults> GetSearchResults(){

          ArrayList<SearchResults> results = new ArrayList<SearchResults>();
          ArrayList<SearchResults> results1 = new ArrayList<SearchResults>();
          ArrayList<SearchResults> results2 = new ArrayList<SearchResults>();

          Document doc = Jsoup.parse(kpn);  
          Elements tdsFromSecondColumn = doc.select("table.personaltable td:eq(0)");
          Elements tdsFromSecondColumn1 = doc.select("table.personaltable td:eq(1)");

          SearchResults sr1 = new SearchResults();
          SearchResults sr2 = new SearchResults();


          for (Element tdFromSecondColumn : tdsFromSecondColumn) {                             
               sr1 = new SearchResults();  
               sr1.setNaam(tdFromSecondColumn.text());  
               results.add(sr1);  
          }  

          for (Element tdFromSecondColumn1 : tdsFromSecondColumn1) {                               
               sr1 = new SearchResults();  
               sr1.setWaarde(tdFromSecondColumn1.text());  
               results1.add(sr1);  
          }  

          for (int i = 0; i < results.size() && i < results1.size();i++) { 
              results.add(results.get(i));
              results2.add(results1.get(i)); 
            } 

          return results2;

         }
     }
4

3 に答える 3

1

SearchResults問題は、各ループを通過するたびに新しいオブジェクトを作成していることです。SearchResults最初のループの各反復中にオブジェクトを作成することSearchResultsは問題ありませんが、最初のループで作成されたオブジェクトを2番目のループに使用する必要があり、新しいオブジェクトを作成しないでください。

于 2011-10-25T18:31:14.053 に答える
1

クリスが言ったことに+1。また、これら2つのループを組み合わせようとしている場合、その構文ではそれを行うことはできません。単純なカウント方法を使用するだけです。

for(Object o : oList1) {
    doStuff(o);
}

for (Object o : oList2) {
    doStuff2(o);
}

になります

for (int i = 0; i < oList1.size() && i < oList2.size(); i++) {
    doStuff(oList1.get(i));
    doStuff2(oList2.get(i));
}

もちろん、これは2つのリストが同じ長さであることを前提としています。そうでない場合、リストの1つが完全に消費されません。それらが異なる場合は、ループでANDの代わりにORを使用し、それぞれにnullがないかチェックしてから操作することができますが、2つの別々のループを使用する方がよいでしょう。

于 2011-10-25T19:05:20.387 に答える
0

うまくいきました!kcoppockから少し後退するようにアドバイスを受けた後、ビールとタバコを持っていると、私が思ったように解決策が簡単になりました:

public ArrayList<SearchResults> GetSearchResults(){

          ArrayList<SearchResults> results = new ArrayList<SearchResults>();

          Document doc = Jsoup.parse(kp);  
       // Get all td's 
          Elements waardes= doc.select("td"); 
       // Iterator over those elements      
          ListIterator<Element> postIt = waardes.listIterator(); 

          SearchResults sr1 = new SearchResults();

          while (postIt.hasNext()) { 
                sr1 = new SearchResults();
                // Add the value text to the ArrayList      
                sr1.setNaam(postIt.next().text()); 
                sr1.setWaarde(postIt.next().text());  
                results.add(sr1); 
            } 

          return results;

         }
     }
于 2011-10-25T21:33:21.763 に答える