0

StringIndexOutOfBoundExeptionこの時点でなぜ得られるのか、私には手がかりがありません:

for (int i = start; i < dataList.size() - 6
& dataList.get(i + 1).toString().substring(1).equals(lineNumber) 
& !dataList.get(i + 1).toString().substring(1)
                        .equals("LIST_END"); i += 6)
            {
            if (!dataList.get(i).toString().contains("null")){ 
                shortList.add(dataList.get(i).toString()); }
            else {shortList.add("");}

            if (!dataList.get(i+1).toString().contains("null")){
                shortList.add(dataList.get(i + 1).toString());}
            else {shortList.add("");}

            if (!dataList.get(i+2).toString().contains("null")){
                shortList.add(dataList.get(i + 2).toString());}
            else {shortList.add("");}

            if (!dataList.get(i+3).toString().contains("null")){
                shortList.add(dataList.get(i + 3).toString()); }
            else {shortList.add("");}

            if (!dataList.get(i+4).toString().contains("null")){
                shortList.add(dataList.get(i + 4).toString()); }
            else {shortList.add("");}

これは、 this からデータを追加するループ内にありますArrayList

[null, 00010, 2013, 2.0, null,等々。ご覧のとおり、最初と 5 番目の要素は null です。

最初の要素をチェックすると、含まれている場合null、例外がスローされます。5 番目の要素を確認すると、含まれている場合は含まれnullておらず、" "UI に空の文字列が表示されます。

これの理由は何ですか?

最初の要素の if ステートメントをコメントアウトすると、UI に が表示されますnullTextView(これは、ディスプレイの最初の要素を表示する、ArrayList私の Android アプリケーションのコードですnull)

編集:

すべてのコメントへの回答:

dataList.size可変で、この場合は 7

はい、データは SAP インターフェースからのものですが、カーソルは使用されません

条件が追加されました

エラーメッセージは次のとおりです。

08-14 11:45:01.725: E/Request(18465): java.lang.StringIndexOutOfBoundsException: 長さ = 0; index=1 、最初の要素の if 条件の行を指す

* EDIT2: *

繰り返しますが、私の問題を特定するには:

私は遭遇します:

08-14 11:45:01.725: E/Request(18465): java.lang.StringIndexOutOfBoundsException: 長さ = 0; インデックス=1

しかし、なぜ?私の配列にはデータがあり、5 番目の要素についても同じ if 条件が機能します。なぜ最初のif条件でエラーが発生するのですか(私のログによると)

4

3 に答える 3

3

for問題の原因となっているコードは、ステートメントの条件である可能性が最も高いです。

dataList.get(i + 1).toString().substring(1)

この条件は、空の文字列を返すStringIndexOutOfBoundsException: length=0; index=1ときにをスローします。dataList.get(i + 1).toString()

于 2013-08-14T12:20:07.057 に答える
0

さて、私は最終的にエラーを見つけました、みんなに感謝します!

エラーは .substring(1) が原因で発生しましたが、存在しない配列フィールドにアクセスしようとしたという理由ではありません。

前述したように、最初の if ステートメントを削除すると、エラーは発生しません。

if (!dataList.get(i).toString().contains("null"))

nulltoの置換も含め、このループ内のすべてが正常に機能し""ます。

[後で、最初の属性の if フロントを削除したいので、

.substring(1)

もちろん、これは失敗します。そのため、文字列は now""です。

質問とコメントで言及したように、ログが投稿したループを指しているため、それはわかりませんでした。コードをデバッグしようとすると、プログラムはこの時点で終了します。

なぜこのようなことが起こるのか、理由はわかりませんが、少なくとも、エラーの原因はわかっています。

于 2013-08-16T05:10:52.933 に答える