4

良い一日、私はここに2つの質問があります:

まず、背景情報。

androidのドキュメントから、データベースにクエリを実行するときに、カーソルアダプターで機能させるには、「_id」という名前の列を返す必要があります。今私の実装では、3つの列「_id」、「列A」、「列B」があるとしましょう。

したがって、データベーステーブルに8つのエントリ行がある場合、列Aの最初の3行が入力され、列Bの次の5行が入力されます。データベースに列Bを照会し、バインドビューで以下のコードを使用すると、カーソルがすべての行を返し、最初の3つのエントリがnullになり、最後の5つのアイテムが画像のグリッドビューに表示されます。

これが私のbindViewです:

@Override
public void bindView(View view, Context context, Cursor cursor) {
     ViewHolder holder = (ViewHolder)view.getTag();
 int columnIndex = cursor.getColumnIndexOrThrow(columnName);
 final String name = cursor.getString(columnIndex);
     while(cursor.moveToNext()){

            if(name != null){
             Log.d(TAG, "string name in gridimageadapter is " + name);

             BitmapFactory.Options options = new BitmapFactory.Options();
             Bitmap bitmap = BitmapFactory.decodeFile(name);

             Bitmap newbitmap = Bitmap.createScaledBitmap(bitmap, 200, 200, false);
             if(holder.image != null){
                 holder.image.setImageBitmap(newbitmap); 
             }
             bitmap.recycle();

            }
     }
}

だから私の質問は:

  1. null以外の行を持つ列を返すsqliteクエリを作成するにはどうすればよいですか?私の現在の実装は次のとおりです。

    public Cursor retrieveTag(String tag){

        String[] condition = {KEY_ID,tag};
    Cursor cursor = db.query(DATABASE_TABLE, condition, null, null, null, null, null);      
        return cursor;
    }
    
  2. BindViewコードから、この条件を次のように使用する場合

    if(!name.equals(null)||!name.equals( "")){}

NullPointerExceptionが発生します。それはなぜですか?..これは文字列を正しくテストする正しい方法ですか?..

私の質問が明確であることを願っています。どんな助けでも大歓迎です。ありがとうございました。

4

1 に答える 1

7

SQLクエリを使用すると、null値なしでデータを管理できます。以下のコードを参照してください。

Cursor c=db.rawQuery("Select columnB from tablename where columnB IS NOT NULL");
于 2012-08-11T13:03:47.283 に答える