为什么我在设备上进行测试时无法看到以编程方式创建的书签

时间:2012-01-17 12:13:46

标签: android bookmarks

我有一个应用程序向我显示所有书签。我可以列出书签然后我的按钮添加书签。我没有实现代码来立即更新列表,但是当我返回时,新书签显示在列表中。 它是我添加的默认书签,我添加了这些字段

 map.put(Browser.BookmarkColumns.CREATED, creationTime);
                map.put(Browser.BookmarkColumns.TITLE, addTitle);
                map.put(Browser.BookmarkColumns.BOOKMARK, 1);
                cr.update(Browser.BOOKMARKS_URI, map,"_id = " + cur.getInt(0), null);

新书签显示在列表中,但是当我打开浏览器并查看书签标签时,所有其他书签都存在但不是我创建的任何书签。

我已经在7和10版本的模拟器上进行了测试,它没有问题,但是当我在我的三星Galaxy s2上运行2.3.3版本时它会添加到列表中。我已经介入了设备并创建了书签,我知道这是因为我的代码设置为添加,如果它找不到或只是重写,如果它找到。

我安装了多个浏览器我的设备上有firefox和opera。 Firefox保留了自己的书签,我还没有使用过Opera

这里是所有添加书签代码

private void addBookmark(String addTitle, String addUrl)    {
    ContentResolver cr = getContentResolver(); 
    Cursor cur = cr.query(BOOKMARKS_URI, projection,     android.provider.Browser.BookmarkColumns.BOOKMARK, null, null);
    //first find out if this title has been used before
    boolean found = false;
    long creationTime = new Date().getTime();
    if (cur.moveToFirst()) {
        String title;           
        int count = 0;
        int titleColumn;

        do {                 
            titleColumn = cur.getColumnIndex(BookmarkColumns.TITLE);
            title = cur.getString(titleColumn);
            if (title.equals(addTitle)) 
            {
                found = true;
                ContentValues map = new ContentValues();
                map.put(Browser.BookmarkColumns.CREATED, creationTime);
                map.put(Browser.BookmarkColumns.TITLE, addTitle);
                map.put(Browser.BookmarkColumns.BOOKMARK, 1);
                map.put(Browser.BookmarkColumns.DATE, 0);
                map.put(Browser.BookmarkColumns.VISITS, 0);
                cr.update(Browser.BOOKMARKS_URI, map,"_id = " + cur.getInt(0), null);
                Log.d(LOGTAG,"title found: "+ Integer.toString(count));
            }
            count++;   
        }while (cur.moveToNext());
    }else {
        Log.d(LOGTAG,"didn't move to first");
    }

    if (!found) {

            cur = cr.query(BOOKMARKS_URI,
                    projection, 
                    android.provider.Browser.BookmarkColumns.BOOKMARK, 
                    null, 
                    null);
            // Adding a bookmark for a site the user has not been to.
            ContentValues map = new ContentValues();
            map.put(Browser.BookmarkColumns.TITLE, addTitle);
            map.put(Browser.BookmarkColumns.URL, addUrl);
            map.put(Browser.BookmarkColumns.CREATED, creationTime);
            map.put(Browser.BookmarkColumns.BOOKMARK, 1);
            map.put(Browser.BookmarkColumns.DATE, 0);
            map.put(Browser.BookmarkColumns.VISITS, 0);
            cr.insert(Browser.BOOKMARKS_URI, map);
    }
}

这是我试过的最后一个代码 我将访问值设置为100,现在将其显示为历史记录项,但是将星号显示为收藏夹。这告诉我,我将其中一个值设置错误或错过了一个。历史记录选项卡知道它的最爱,但最喜欢的标签不

if (!found) {
        cur = cr.query(BOOKMARKS_URI,
                projection,
                android.provider.Browser.BookmarkColumns.BOOKMARK,
                null,
                null);
        //Adding a bookmark for a site the user has not been to.
        ContentValues map = new ContentValues();
        map.put(Browser.BookmarkColumns.TITLE, "Random title");
        map.put(Browser.BookmarkColumns.URL, "http://www.bbc.co.uk");
        map.put(Browser.BookmarkColumns.CREATED, System.currentTimeMillis());
        map.put(Browser.BookmarkColumns.BOOKMARK, 1);
        map.put(Browser.BookmarkColumns.DATE, 0L);
        map.put(Browser.BookmarkColumns.VISITS, 100);
        getContentResolver().insert(Browser.BOOKMARKS_URI, map);


    }

1 个答案:

答案 0 :(得分:0)

编辑:鉴于你的代码更新,请尝试这样的事情:

private static final String SELECTION = BookmarkColumns.TITLE + "=? AND " +
    BookmarkColumns.URL + "=? AND " + BookmarkColumns.BOOKMARK + "=1";

private void addBookmark(String title, String url) {
    ContentResolver cr = getContentResolver();
    Cursor cursor = cr.query(Browser.BOOKMARKS_URI, new String[]{BaseColumns._ID}, SELECTION, new String[]{title, url}, null);
    if (cursor != null) {
        try {
            if (!cursor.moveToNext()) {
                // No such bookmark, create a new instance
                ContentValues values = new ContentValues();
                values.put(BookmarkColumns.BOOKMARK, 1);
                values.put(BookmarkColumns.CREATED, System.currentTimeMillis());
                values.put(BookmarkColumns.DATE, 0L);
                values.put(BookmarkColumns.TITLE, title);
                values.put(BookmarkColumns.URL, url);
                values.put(BookmarkColumns.VISITS, 0);
                cr.insert(Browser.BOOKMARKS_URI, values);
            }
        } finally {
            cursor.close();
        }
    }
}