我用它来获取网页中的元素列表。 http://www.gamespy.com/index/release.html
// Get all the game elements
Elements games = doc.select("div.FP_Up_TextWrap b");
// Create new ArrayList
ArrayList<String> gameList = new ArrayList<String>();
// Iterator over those elements
ListIterator<Element> postIt = games.listIterator();
while (postIt.hasNext()) {
// Add the game text to the ArrayList
gameList.add(postIt.next().text());
}
这将返回我想要的所有标签。但它返回带有标题的完整标签我只想要标题发布日期和Img sr。 我想将它返回到列表视图。 我该怎么做呢?我可能完全错了,所以你们可能想查看HTML页面来源。
编辑 - 给我NullPointer错误
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
outputTextView = (TextView)findViewById(R.id.outputTextView);
ListView list = (ListView)findViewById(R.id.list);
ArrayList<String> gameList = new ArrayList<String>();
Document doc = null;
try {
doc = Jsoup.connect("http://www.gamespy.com/index/release.html").get();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// Get all td's that are a child of a row - each game has 4 of these
Elements games = doc.select("tr > td.indexList1, tr > td.indexList2");
// Iterator over those elements
ListIterator<Element> postIt = games.listIterator();
while (postIt.hasNext()) {
// Add the game text to the ArrayList
gameList.add(postIt.next().text());
}
String[] items = new String[gameList.size()];
gameList.toArray(items);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, items);
// error points here
list.setAdapter(adapter);
}
}
编辑 - 列表的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/outputTextView"
/>
<ListView android:layout_height="wrap_content" android:id="@+id/list" android:layout_width="match_parent"></ListView>
</LinearLayout>
答案 0 :(得分:1)
您将无法使用此代码“返回列表视图”,但您可以创建自己的列表视图子类,然后可以按照相同的技术返回:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ListView listView1 = (ListView) findViewById(R.id.listView1);
ArrayList<String> gameList = new ArrayList<String>();
// Iterator over those elements
ListIterator<Element> postIt = games.listIterator();
while (postIt.hasNext()) {
// Add the game text to the ArrayList
gameList.add(postIt.next().text());
}
String[] items = new String[gameList.size()];
gameList.toArray(items);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.some_list_item_view, items);
listView1.setAdapter(adapter);
}
归根结底是为列表设置列表适配器。如果你需要创建自己的列表适配器,你可以子类化并实现ListAdapter来数据绑定其他对象类型,但是已经有一个预定义的适配器(ArrayAdapter)来处理ListView / ListActivity数据绑定的简单字符串集。
更新 - 海报要求提供其他实施细节:
假设:
public class GameMeta {
private String m_title;
private java.util.Date m_releaseDate;
public GameMeta() {
}
public String getTitle(){
return m_title;
}
public void setTitle(String value) {
m_title = value;
}
public java.util.Date getReleaseDate(){
return m_releaseDate;
}
public void setReleaseDate(java.util.Date releaseDate){
m_releaseDate = releaseDate;
}
}
您可以创建适配器:
public class GamesMetaAdapter implements Adapter extends ListAdapter {
private ArrayList<GameMeta> m_list = new ArrayList<GameMeta>();
private Context m_context = null;
public GamesMetaAdapter(Context context) {
m_context = context;
}
@Override
public int getCount(){
return m_list.size();
}
@Override
public Object getItem(int position){
if(position < m_list.size()){
return m_list.getAt(position);
}
return null;
}
@Override
public long getItemId(int position) {
return (long)position;
}
@Override
public int getItemViewType(int position) {
return IGNORE_ITEM_VIEW_TYPE;
}
@Override
public View getView (int position, View convertView, ViewGroup parent) {
TextView simpleView = new TextView(this.m_context);
String viewText = this.m_items[position].getTitle() + ", Released " + this.m_items[position].getReleaseDate().toString();
simpleView.setText(this.m_items[position].getTitle());
if(TextView.class.isInstance(convertView)) {
convertView = simpleView;
}
return simpleView;
}
@Override
public int getViewTypeCount() {
return 1;
}
@Override
public boolean hasStableIds(){
return false;
}
@Override
public boolean isEmpty() {
return m_list.size() == 0;
}
@Override
public void registerDataSetObserver (DataSetObserver observer) {
}
@Override
public void unregisterDataSetObserver (DataSetObserver observer) {
}
/* LIST ADAPTER MEMBERS */
@Override
public boolean areAllItemsEnabled() {
return true;
}
@Override
public boolean isEnabled(int position) {
return true;
}
}
我这里没有Java编译器,所以如果这不只是复制/粘贴到你的项目中,请不要叮嘱我,但它应该在那里90%以上。
快乐的编码。
乙
答案 1 :(得分:1)
这应该收集标题和发布日期。您还想要哪个图像?
// Get all td's that are a child of a row - each game has 4 of these
Elements games = doc.select("tr > td.indexList1, tr > td.indexList2");
// Iterator over those elements
ListIterator<Element> gameIt = games.listIterator();
while (gameIt.hasNext()) {
// Get the title of the game
Element title = gameIt.next();
System.out.println(title.text());
// Unneeded elements
Element platform = gameIt.next();
Element genre = gameIt.next();
// Get the release date of the game
Element release = gameIt.next();
System.out.println(release.text() + "\n@@@@@@");
}