0

2このコードについて少し助けが必要です。IndexOutOfBoundsException が発生しています。理由はわかっていますが、それを修正しようとして立ち往生しています。問題: eMain.getElementsByClass("trA1").size() = 8 および eMain.getElementsByClass("trA2").size() = 7 (サイズは非常に多くなりますが、trA1 は常に trA2 より大きくなります)。各要素を ArrayList に add(trA1)、add(trA2)、add(trA1)、add(trA2)...... として追加する必要があります (そのために for ループを使用しています)。要素8に、trA2要素8がないため、例外が発生します。要素がnullまたは ""であるかどうかをIfステートメントで確認しようとしましたが、それでも例外が発生します。何か案は。

                // game list data
            if (!eMain.equals("")) {
                for (int i=0; i < eMain.getElementsByClass("trA1").size(); i++) {
                    // check if AsyncTask was cancelled
                    if (isCancelled())
                        break;

                    if (eMain.getElementsByClass("trA1").select("strong").get(i).text() != null) {
                        // get string data
                        String titleA1 = eMain.getElementsByClass("trA1").select("strong").get(i).text();
                        String achAmountA1 =  eMain.getElementsByClass("trA1").select("td[align]").get(mAchAmountCounter).text();
                        String gsAmountA1 = eMain.getElementsByClass("trA1").select("td[align]").get(mGsAmountCounter).text();
                        String aPageLinkA1 = eMain.getElementsByClass("trA1").select("td a").get(mPageLinkCounter).attr("abs:href");
                        String iconSrcA1 = eMain.getElementsByClass("trA1").select("td a img").get(i).attr("abs:src");

                        // create game object
                        GameObject gameObjectA1 = new GameObject();
                        gameObjectA1.setGlTitle(titleA1);
                        gameObjectA1.setGlAchAmount(achAmountA1 + " achievements");
                        gameObjectA1.setGlGSAmount(gsAmountA1 + " gamer score");
                        gameObjectA1.setGlAchPageUrl(aPageLinkA1);
                        gameObjectA1.setGlIcon(iconSrcA1);
                        mGameObjectList.add(gameObjectA1);
                    }

                    if (eMain.getElementsByClass("trA2").select("strong").get(i).text() != null) {
                        String titleA2 = eMain.getElementsByClass("trA2").select("strong").get(i).text();
                        String achAmountA2 =  eMain.getElementsByClass("trA2").select("td[align]").get(mAchAmountCounter).text();
                        String gsAmountA2 = eMain.getElementsByClass("trA2").select("td[align]").get(mGsAmountCounter).text();
                        String aPageLinkA2 = eMain.getElementsByClass("trA2").select("td a").get(mPageLinkCounter).attr("abs:href");
                        String iconSrcA2 = eMain.getElementsByClass("trA2").select("td a img").get(i).attr("abs:src");

                        GameObject gameObjectA2 = new GameObject();
                        gameObjectA2.setGlTitle(titleA2);
                        gameObjectA2.setGlAchAmount(achAmountA2 + " achievements");
                        gameObjectA2.setGlGSAmount(gsAmountA2 + " gamer score");
                        gameObjectA2.setGlAchPageUrl(aPageLinkA2);
                        gameObjectA2.setGlIcon(iconSrcA2);
                        mGameObjectList.add(gameObjectA2);
                    }

                    // counters
                    mPageLinkCounter += 3;
                    mAchAmountCounter += 2;
                    mGsAmountCounter += 2;

                    // update progress bar
                    publishProgress((100 / (Integer) Math.round(eA1.size())));
                }
            }
4

1 に答える 1

1

「trA2」のサイズは常に「trA1」のサイズよりも小さいため、修正としてこれを行うことができます。

for ループの直前で、次のように宣言します。

final int size2 = eMain.getElementsByClass("trA2").size();

for ループで、次のように変更します。

if (eMain.getElementsByClass("trA2").select("strong").get(i).text() != null)

に:

if (i < size2 && eMain.getElementsByClass("trA2").select("strong").get(i).text() != null)

トピックとは関係ありませんが、コードをわかりやすくするために、コードをわかりやすくするために、for ループの直前にも2 つの変数element1element2toeMain.getElementsByClass("trA1")とto を宣言することをお勧めします。eMain.getElementsByClass("trAeMain.getElementsByClass("trA2")

于 2013-06-08T00:28:05.910 に答える