簡體   English   中英

如何防止Android SQLite將堆棧跟蹤信息轉儲到logcat?

[英]How to prevent Android SQLite from dumping stack trace to logcat?

在Android 2.3.3上,我正在使用API​​方法批量導入我的SQLite表之一:

SQLiteDatabase.insert(字符串表,字符串nullColumnHack,ContentValues值)

它工作正常,但是如果任何行都存在數據庫錯誤(例如約束錯誤),則將完整的堆棧跟蹤寫入Android Logcat,從而迅速填充。

如何關閉此堆棧跟蹤?

我已經處理了所有拋出的異常,但是Logcat從SQLite庫代碼中被污染了。

我擔心移動設備上的性能。

  • 導入交易已啟用
  • 預加載的DB是不可能的,因為數據可能會更改

應該強制執行約束,我將處理沖突,但是我想關閉Logcat中針對每個沖突的20行堆棧跟蹤乘以數百個沖突。

不幸的是,我也不能使用Android Froyo引入的高級沖突處理功能,因為該應用程序還必須在較舊的設備上運行。

干杯。

好的,我剛剛找到了以下解決方案:

我必須使用其他API方法(不是SQLiteDatabase.insert() ):

SQLiteDatabase.insertOrThrow(String table, String nullColumnHack, ContentValues values)

現在,按預期從SQLite庫引發了異常,並且沒有轉儲堆棧跟蹤。

只需根據標簽或進程ID過濾掉您不感興趣的任何內容。 您可以在Eclipse的Logcat查看器中輕松完成此操作,或者,如果您在命令行上使用Logcat,請參見此處的說明

這不是污染。 LogCat的目的是注冊設備/仿真器上正在發生的一切。

如果要過濾出LogCat,則可以在Eclipse中進行過濾(可以按日志標簽,PID或按日志級別過濾),從而提供了一種從LogCat窗口中“刪除”有害異常的方法。

編輯如果問題是性能(根據您的評論),我認為您不必擔心。

  • 如果發現性能不佳,則可以通過在批處理插入中啟用事務來獲得更多收益。
  • 另外,如果要為您的應用程序插入“起始數據”,您是否考慮過將apk與預加載的數據庫一起運送? 除了在運行時插入所有內容外,您還可以復制自己准備的現有數據庫。 不再存在約束問題,幾乎可以為您的用戶立即啟動。 當然,如果它是動態批處理插入(基於用戶輸入或在運行時定義的外部參數),則不可能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM