2016-05-25 13 views
0

{1、2、3 ..}(IDの文字列)のように見えるString []があります。クエリ用の複数のSelectionArgs

IDに一致するすべてのエントリを取得するために、Androidでクエリを作成します。 ここに私のコード:

Cursor idFoodCursor = getContext().getContentResolver().query(
      uriFood, 
      null, 
      CookingContract.FoodEntry.COLUMN_NAME + " LIKE ?", 
      new String[]{selectionArgs}, 
      null 
    ); 

    if (idFoodCursor.moveToFirst()) { 

     List<String> ids = new ArrayList<String>(); 
     while (!idFoodCursor.isAfterLast()) { 
      ids.add(idFoodCursor.getString(idFoodCursor.getColumnIndex(CookingContract.FoodEntry._ID))); 
      idFoodCursor.moveToNext(); 
     } 
     idFoodCursor.close(); 

     //Convert the ArrayList in String[] 
     String[] idSelectionArg = new String[ids.size()]; 
     ids.toArray(idSelectionArg); 

     return new CursorLoader(
       getContext(), 
       uriFood, 
       FOOD_COLUMNS, 
       CookingContract.FoodEntry._ID + " = ?", 
       idSelectionArg, 
       sortOrder 
     ); 

    } 

私はできるだけ多くを追加する必要があるため、最後のクエリは動作しません「?」アレイ内のIDとして:

Caused by: java.lang.IllegalArgumentException: Cannot bind argument at index 3 because the index is out of range. The statement has 1 parameters. 

私は取得したいものを考慮して、どのように問題を解決できますか?私が望んでいた仕事をしていません

return new CursorLoader(
      getContext(), 
      uriFood, 
      FOOD_COLUMNS, 
      "_id IN (SELECT _id FROM food WHERE name LIKE ?)", 
      new String[] {selectionArgs}, 
      sortOrder 

    ); 

答えて

0

(テーブル内のすべてのIDの対応は)すべてのオーバー言及したコードは、置き換えることができます。

0
public class Constants { 
    public static final String JOB_STATUS_CANCELLED = "Cancelled"; 
    public static final String JOB_STATUS_COMPLETE = "Complete"; 
} 

selection = JobListContract.JobEntry.COLUMN_NAME_JOB_STATUS + " NOT IN (? , ?) "; 

// The spaces matter!!!! 

selectionArgs = new String[]{ Constants.JOB_STATUS_COMPLETE, Constants.JOB_STATUS_CANCELLED }; 


c = db != null ? db.query(
        JobListContract.JobEntry.TABLE_NAME, // The table to query 
        projection,        // The columns to return 
        selection,        // The columns for the WHERE clause 
        selectionArgs,       // The values for the WHERE clause 
        null,          // don't group the rows 
        null,          // don't filter by row groups 
        JobListContract.JobEntry.COLUMN_NAME_ENTRY_ID + " desc" // The sort order 
      ) : null;