简体   繁体   中英

How to fix [The method put(String, Boolean) in the type ContentValues is not applicable for the arguments (Boolean, Boolean)]

I'm trying to learn how to develop an Android App and am trying to re-write Notepadv3Solution {http://developer.android.com/training/notepad/index.html} from modifying it for my own purposes.

In the method createTask (nr the bottom), I get the error The method put(String, Boolean) in the type ContentValues is not applicable for the arguments (Boolean, Boolean) . I've added a boolean field for the database, adding it also to the createTask method. How can I get it the boolean field to work?

package com.superiorxc.taskcentral;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class TasksDbAdapter {

    public static final String KEY_ROWID = "_id";
    public static final String KEY_TITLE = "title";
    public static final String KEY_BODY = "body";
    public static final Boolean KEY_COMPLETE = true;

    private static final String TAG = "TasksDbAdapter";
    private DatabaseHelper mDbHelper;
    private SQLiteDatabase mDb;    

    /**
     * Database creation sql statement
     */
    private static final String DATABASE_CREATE =
        "create table tbl_tasks (_id integer primary key autoincrement, "
        + "title text not null, body text, complete boolean not null);";

    private static final String DATABASE_NAME = "db_taskcentral";
    private static final String DATABASE_TABLE = "tbl_tasks";
    private static final int DATABASE_VERSION = 1;

    private final Context mCtx;    

    private static class DatabaseHelper extends SQLiteOpenHelper {

        DatabaseHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {

            db.execSQL(DATABASE_CREATE);
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                    + newVersion + ", which will destroy all old data");
            db.execSQL("DROP TABLE IF EXISTS tbl_tasks");
            onCreate(db);
        }
    }    

    /**
     * Constructor - takes the context to allow the database to be
     * opened/created
     * 
     * @param ctx the Context within which to work
     */
    public TasksDbAdapter(Context ctx) {
        this.mCtx = ctx;
    }

    /**
     * Open the db_taskcentral database. If it cannot be opened, try to create a new
     * instance of the database. If it cannot be created, throw an exception to
     * signal the failure
     * 
     * @return this (self reference, allowing this to be chained in an
     *         initialization call)
     * @throws SQLException if the database could be neither opened or created
     */
    public TasksDbAdapter open() throws SQLException {
        mDbHelper = new DatabaseHelper(mCtx);
        mDb = mDbHelper.getWritableDatabase();
        return this;
    }

    public void close() {
        mDbHelper.close();
    }   

    /**
     * Create a new task using the title and body provided. If the task is
     * successfully created return the new rowId for that note, otherwise return
     * a -1 to indicate failure.
     * 
     * @param title the title of the task
     * @param body the body of the task
     * @return rowId or -1 if failed
     */
    public long createTask(String title, String body, Boolean complete) {
        ContentValues initialValues = new ContentValues();
        initialValues.put(KEY_TITLE, title);
        initialValues.put(KEY_BODY, body);
        initialValues.put(KEY_COMPLETE,complete);


        return mDb.insert(DATABASE_TABLE, null, initialValues);
    }    

}

Change KEY_COMPLETE to

public static final String KEY_COMPLETE = "complete";

You want it to reference what you named your column in the database.

You can think of ContentValues as a Map<String,Object> where the key is the name of the database column and the object is what you want to put into the row for that column.

If you are asking "How to convert a Boolean to a String" then the easiest way is this:

String.valueOf(Boolean)

as in the following code:

    Boolean b = false;
    String aString = String.valueOf(b);
    System.out.println(aString);

One solution would be to change

public static final Boolean KEY_COMPLETE = true;

to

public static final String KEY_COMPLETE = "true";

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM