Как загрузить эти элементы, чтобы заполнить список в Android? - PullRequest
1 голос
/ 15 августа 2011

Я использую это, чтобы получить список элементов с веб-страницы.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>

Ответы [ 2 ]

1 голос
/ 15 августа 2011

Это должно собрать названия и даты выпуска.Какое изображение вы тоже хотели?

// 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@@@@@@");
}
1 голос
/ 15 августа 2011

Вы не сможете «вернуть представление списка», используя этот код, но вы можете создать свой собственный подкласс представления списка, который затем можно будет вернуть, следуя тем же методам:

@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%.

Удачного кодирования.

B

...