【问题标题】:Get browser history and search result in android在android中获取浏览器历史记录和搜索结果
【发布时间】:2011-11-29 09:03:56
【问题描述】:

我正在尝试从 android 浏览器获取历史记录和搜索结果。 在下面的代码中,我得到了所有的书签,效果很好:

public void getBrowser(){
    String[] requestedColumns = {
        Browser.BookmarkColumns.TITLE,
        Browser.BookmarkColumns.VISITS,
        Browser.BookmarkColumns.BOOKMARK
    };
    Cursor faves = managedQuery(Browser.BOOKMARKS_URI, requestedColumns,
    Browser.BookmarkColumns.BOOKMARK + "=1", null, Browser.BookmarkColumns.VISITS);
    Log.d(DEBUG_TAG, "Bookmarks count: " + faves.getCount());
    int titleIdx = faves.getColumnIndex(Browser.BookmarkColumns.TITLE);
    int visitsIdx = faves.getColumnIndex(Browser.BookmarkColumns.VISITS);
    int bmIdx = faves.getColumnIndex(Browser.BookmarkColumns.BOOKMARK);
    faves.moveToFirst();
    while (!faves.isAfterLast()) {
        Log.d("SimpleBookmarks", faves.getString(titleIdx) + " visited " + faves.getInt(visitsIdx) + " times : " + (faves.getInt(bmIdx) != 0 ? "true" : "false"));
        faves.moveToNext();
    }
}

当我试图只从浏览器中获取历史记录时,我正在尝试以下代码:

public void getBrowserHist()  {
    Cursor mCur = managedQuery(Browser.BOOKMARKS_URI, Browser.HISTORY_PROJECTION, null, null, null);
    mCur.moveToFirst();
    if (mCur.moveToFirst() && mCur.getCount() > 0) {
        while (mCur.isAfterLast() == false) {
            Log.v("titleIdx", mCur.getString(Browser.HISTORY_PROJECTION_TITLE_INDEX));
            Log.v("urlIdx", mCur.getString(Browser.HISTORY_PROJECTION_URL_INDEX));
            mCur.moveToNext();
        }
    }
}

问题是我现在得到了所有的书签、历史记录和最常访问的页面。我只想要历史专栏。我也不想从谷歌搜索中得到搜索结果。我已经尝试过 SEARCHES_URI 对象,但我无法让它工作。 有人有什么建议可以解决我的问题吗?

【问题讨论】:

    标签: android uri browser-history


    【解决方案1】:

    出于某种奇怪的原因,Google 决定在 SDK 中混合使用书签和历史记录,称它们为“书签”。 试试下面的代码,重要的是按“书签”类型过滤。

        String[] proj = new String[] { Browser.BookmarkColumns.TITLE, Browser.BookmarkColumns.URL };
        String sel = Browser.BookmarkColumns.BOOKMARK + " = 0"; // 0 = history, 1 = bookmark
        mCur = this.managedQuery(Browser.BOOKMARKS_URI, proj, sel, null, null);
        this.startManagingCursor(mCur);
        mCur.moveToFirst();
    
        String title = "";
        String url = "";
    
        if (mCur.moveToFirst() && mCur.getCount() > 0) {
            while (mCur.isAfterLast() == false && cont) {
    
                title = mCur.getString(mCur.getColumnIndex(Browser.BookmarkColumns.TITLE));
                url = mCur.getString(mCur.getColumnIndex(Browser.BookmarkColumns.URL));
                // Do something with title and url
    
                mCur.moveToNext();
            }
        }
    

    【讨论】:

      【解决方案2】:

      试试这个:

      package higherpass.TestingData;
      
      import android.app.Activity;
      import android.os.Bundle;
      import android.provider.Browser;
      import android.widget.TextView;
      import android.database.Cursor;
      
      public class TestingData extends Activity {
          /** Called when the activity is first created. */
          @Override
          public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.main);
              TextView view = (TextView) findViewById(R.id.hello);
              String[] projection = new String[] {
                  Browser.BookmarkColumns.TITLE
                  , Browser.BookmarkColumns.URL
              };
              Cursor mCur = managedQuery(android.provider.Browser.BOOKMARKS_URI,
                  projection, null, null, null
                  );
              mCur.moveToFirst();
              int titleIdx = mCur.getColumnIndex(Browser.BookmarkColumns.TITLE);
              int urlIdx = mCur.getColumnIndex(Browser.BookmarkColumns.URL);
              while (mCur.isAfterLast() == false) {
                  view.append("n" + mCur.getString(titleIdx));
                  view.append("n" + mCur.getString(urlIdx));
                  mCur.moveToNext();
              }
      
          }
      }
      

      摘自here

      【讨论】:

      • 它不起作用,出现以下错误:ERROR/AndroidRuntime(558): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.hda.ContentProviders/com.hda.ContentProviders.SecondTab }: java.lang.NullPointerException: println 需要一条消息
      • 显示所有调试信息(也是原因,以及它的确切位置为 NULL)
      • java.lang.RuntimeException: 无法启动活动 ComponentInfo{com.hda.ContentProviders/com.hda.ContentProviders.SecondTab}: java.lang.NullPointerException: println 需要一条消息
      猜你喜欢
      • 2017-11-01
      • 2012-05-10
      • 2011-02-04
      • 2013-11-18
      • 1970-01-01
      • 2011-11-14
      • 2013-05-21
      • 2018-02-12
      • 2012-05-08
      相关资源
      最近更新 更多