0
int i=0;
ContentValues values = null;

for ( SortedMap.Entry<Integer, String> entry : mapDefect.entrySet() ) {
    if( i++ < count )
        continue;
        if( i < arrlst.size() ) {
            values = new ContentValues();
            Log.d("MAP", "Id :"+entry.getKey()+"Des :"+entry.getValue()+"Co :"+ arrlst.get(i));
            values.put( MARKER_COORD, arrlst.get( i ) );
            values.put( MARKER_ID, entry.getKey() ); 
            values.put( DEFECT_DESCRIPTION, entry.getValue() );
            values.put( IMAGE_ID_F, imageID + 1 );
            Log.d( "Err", "in insertNewDefectsDescription" );
            long rowId = db.insert( TABLE_DEFECTS, null, values );
            long rowId1 = rowId;
            i++;
        }
    }

したがって、count変数の後でのみarraylistにアクセスしたいので、次のようにします。-

if(i++<count)
    continue;

しかし、「挿入」行にブレークポイントを挿入すると、機能しません。行がまったく実行されていないため、データがデータベースに挿入されていません。何が悪かったの?

'値'はnullです。

4

4 に答える 4

1

あなたのコードを理解するのは少し難しいです以下は私の提案です

1.forループの前にi=countを実行しないのはなぜですか。それは多くの反復を節約するでしょう

2.たとえば、iが2回インクリメントされる場合があります

if( i++ < count ) //suppose this condition is false

条件が偽の場合でも、i ++が発生すると、iがインクリメントされてから内部になります

if( i < arrlst.size() ) {
...
i++;// It increments i again
}

ここで論理が間違っている

于 2012-12-20T05:01:13.563 に答える
0

if条件でiも増分するのはなぜですか?何が起こるかというと、反復ごとにiが2ずつ増加します。おそらく、ループの前に最初にiを1に初期化してから、if条件でiの++を削除するか、ループの最後でiの++を削除するだけです。

于 2012-12-20T04:49:22.543 に答える
0

見ずcountに問題の解決策を知ることは困難です。私の推測では、i ++は常にカウントよりも小さいため、ループ本体の残りの部分がスキップされ、次の要素が検査されます。あなたはおそらく欲しいでしょう。if(i++>count)...

{ }さらに、1つのラインifブロックに中括弧を使用することをお勧めします

于 2012-12-20T04:54:34.080 に答える
0

問題が解決しました。私はifとelseを使用しました。else領域では、i変数をインクリメントしましたが、正常に機能しました。

if(i<count)
{
    ..
}
else
    i++;
于 2012-12-21T06:20:27.637 に答える