2012-10-22 36 views
6

Tôi có một nút mà khi nhấn mở trang đăng nhập twitter trong một webview (như một hoạt động). Tôi đang sử dụng twitter4j phiên bản 2.2.6. vấn đề là điều này- khi tôi nhấp vào trình giả lập hoặc samsung của tôi 2 nó hoạt động hoàn hảo witout bất kỳ lỗi, nhưng khi tôi bấm vào nút trên của tôi samsung galaxy 3 GT-I9300 (và bạn bè của tôi cùng một điện thoại) tôi nhận được ngoại lệ sau đây:Strange SQLiteException không có trong tất cả các thiết bị

android.database.sqlite.SQLiteException: không có bảng như: mật khẩu:, khi biên dịch: (? cai ==) SELECT username, password TỪ mật khẩu ĐÂU tại android.database.sqlite. SQLiteCompiledSql.native_compile (Native Phương thức) tại android.database.sqlite.SQLiteCompiledSql. (SQLiteCompiledSql.java:68) tại android.dat abase.sqlite.SQLiteProgram.compileSql (SQLiteProgram.java:143) tại android.database.sqlite.SQLiteProgram.compileAndbindAllArgs (SQLiteProgram.java:361) tại android.database.sqlite.SQLiteProgram. (SQLiteProgram.java:127) tại android.database.sqlite.SQLiteProgram. (SQLiteProgram.java:94) tại android.database.sqlite.SQLiteQuery. (SQLiteQuery.java:53) tại android.database.sqlite.SQLiteDirectCursorDriver.query (SQLiteDirectCursorDriver.java:47) tại android.database.sqlite.SQLiteDatabase.rawQueryWithFactory (SQLiteDatabase.java:1684) tại android.database.sqlite.SQLiteDatabase.queryWithFactory (SQLiteDatabase.java:1569) tại android.database.sqlite.SQLiteDatabase.query (SQLiteDatabase .java: 1525) tại android.dat abase.sqlite.SQLiteDatabase.query (SQLiteDatabase.java:1605) tại android.webkit.WebViewDatabase.getUsernamePassword (WebViewDatabase.java:990) tại android.webkit.BrowserFrame.handleMessage (BrowserFrame.java WEBC89) tại android. os.Handler.dispatchMessage (Handler.java:99) tại android.os.Looper.loop (Looper.java:137) tại android.webkit.WebViewCore $ WebCoreThread.run (WebViewCore.java:950) tại java. lang.Thread.run (Thread.java:856)

webview là một hoạt động (mở rộng hoạt động) tôi có rất nhiều không gian miễn phí tại thời điểm vụ tai nạn:

total- 12187213824 free- 4315947008

cấu hình của tôi lúc vụ tai nạn:

FlipFont=0 
compatScreenHeightDp=546 
compatScreenWidthDp=320 
compatSmallestScreenWidthDp=320 
fontScale=0.93 
hardKeyboardHidden=HARDKEYBOARDHIDDEN_YES 
keyboard=KEYBOARD_NOKEYS 
keyboardHidden=KEYBOARDHIDDEN_NO 
locale=en_US 
mcc=425 
mnc=1 
navigation=NAVIGATION_NONAV 
navigationHidden=NAVIGATIONHIDDEN_YES 
orientation=ORIENTATION_PORTRAIT 
screenHeightDp=615 
screenLayout=SCREENLAYOUT_SIZE_NORMAL+SCREENLAYOUT_LONG_YES 
screenWidthDp=360 
seq=46 
smallestScreenWidthDp=360 
textLayoutDirection=0 
touchscreen=TOUCHSCREEN_FINGER 
uiMode=UI_MODE_TYPE_NORMAL+UI_MODE_NIGHT_NO 
userSetLocale=false 

tính năng thiết bị:

android.hardware.wifi 
android.hardware.location.network 
android.hardware.nfc 
android.hardware.location 
android.hardware.sensor.gyroscope 
android.hardware.screen.landscape 
android.hardware.screen.portrait 
android.hardware.wifi.direct 
android.hardware.usb.accessory 
android.hardware.bluetooth 
android.hardware.touchscreen.multitouch.distinct 
android.hardware.microphone 
android.hardware.sensor.light 
android.hardware.camera.autofocus 
android.software.live_wallpaper 
android.hardware.camera.flash 
android.hardware.telephony 
android.software.sip 
android.hardware.touchscreen.multitouch.jazzhand 
android.hardware.sensor.barometer 
android.hardware.usb.host 
android.hardware.touchscreen.multitouch 
android.hardware.sensor.compass 
android.hardware.faketouch 
android.hardware.camera 
com.sec.feature.minimode 
android.software.sip.voip 
android.hardware.sensor.proximity 
android.hardware.location.gps 
android.hardware.telephony.gsm 
android.hardware.camera.front 
com.nxp.mifare 
android.hardware.touchscreen 
android.hardware.sensor.accelerometer 
glEsVersion = 2.0 

MÔI TRƯỜNG:

getAndroidSecureContainerDirectory=/mnt/asec 
getCloudStorageDirectory=/mnt/sdcard/cloud 
getCloudStorageDirectoryPath=/mnt/sdcard/cloud 
getDataDirectory=/data 
getDownloadCacheDirectory=/cache 
getExternalStorageAndroidDataDir=/mnt/sdcard/Android/data 
getExternalStorageDirectory=/mnt/sdcard 
getExternalStorageDirectoryUsbHost=/mnt/sdcard/Storages/usb 
getExternalStorageState=mounted 
getRootDirectory=/system 
getSecureDataDirectory=/data 
getSystemSecureDirectory=/data/system 
isEncryptedFilesystemEnabled=false 
isExternalStorageEmulated=true 
isExternalStorageRemovable=false 

Quyền:

<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.GET_TASKS"/> 

Trong webview i didnt thực hiện bất kỳ giao dịch sqllite hoặc không có gì liên quan.

xem câu trả lời của tôi về dòng này

Tôi không phải là một gốc sử dụng (có nghĩa là tôi có quyền ghi)

mã liên quan đến webview là:

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    try{ 
        requestWindowFeature(Window.FEATURE_NO_TITLE); 

     setContentView(R.layout.twitter); 
     mIntent = getIntent(); 
     String url = (String)mIntent.getExtras().get("URL"); 
     WebView webView = (WebView) findViewById(R.id.webview); 

     WebSettings settings = webView.getSettings(); 

     settings.setDatabaseEnabled(true); 
     settings.setDatabasePath("/data/data/"+getPackageName()+"/databases"); 
     settings.setDomStorageEnabled(true); 

     settings.setJavaScriptEnabled(true); 
     settings.setAllowFileAccess(true); 
     settings.setSaveFormData(true); 
     settings.setSavePassword(true); 
      webView.setWebViewClient(new WebViewClient() 
      { 
       @Override 
       public boolean shouldOverrideUrlLoading(WebView view, String url) 
       { 
        ... 
        return false; 
       } 
      }); 
      webView.loadUrl(url); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 


    } 
    public void onExceededDatabaseQuota(String url, String 
      databaseIdentifier, long currentQuota, long estimatedSize, long 
      totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater) { 

     quotaUpdater.updateQuota(204801); 
    } 

Tôi đã tìm thấy các liên kết này có một số điểm tương tự:

Tôi đã nhìn vào quá nhiều chủ đề cho một tuần dài và tôi khá thất vọng về nó

không ai có bất kỳ ý tưởng? nhờ

Trả lời

1

khi nó quay ra tôi đã có này hai dòng ở một nơi khác trong các mã:

context.deleteDatabase("webview.db"); 
context.deleteDatabase("webviewCache.db"); 

dòng này, nơi phải xóa bộ nhớ đệm cho webview của tôi, nhưng dòng này chỉ làm việc trên các thiết bị trước, trong thiên hà 3 và có thể các thiết bị khác khi nó quay ra, webview khi bắt đầu không tạo ra cơ sở dữ liệu này một lần nữa vì vậy ngoại lệ sqlite là bởi vì nó thực sự không có một bảng ...

cần phải cẩn thận với điều đó- dòng tôi viết đã gây hiểu nhầm:

"Trong webview tôi đã không thực hiện bất kỳ giao dịch sqllite hoặc không có gì liên quan đến"

+0

tôi có vấn đề chính xác cùng mà không cần sử dụng bất kỳ cho sqllite quá, nhưng tôi đã không làm bất cứ điều gì đặc biệt với bộ nhớ đệm e !! & không biết phải tìm gì ngay bây giờ! – AbdelHady

0

vụ tai nạn này rất khó để tái sản xuất, nhưng tôi đã nhận được cùng một ngoại lệ chính xác (thậm chí nhắc đến "không có bảng như: mật khẩu") và tôi có thể tái tạo nó bằng cách vào một hoạt động, sau đó đến một hoạt động thứ 2, và sau đó mở một WebView trong một hộp thoại, hiển thị HTML có chứa các yếu tố hình thức sau đây:

<input type="password" name="pword" id="pword"> 

Loại bỏ rằng type="password" từ đó yếu tố hình thức ngăn cản nó bị rơi.

WebView cố gắng lưu mật khẩu để sử dụng sau này, trong một db sqlite.Tôi không thể nói chắc chắn, nhưng tôi tưởng tượng đây không phải là hành vi mong muốn đối với hầu hết các nhà phát triển, vì vậy nếu bạn muốn, bạn có thể tắt tính năng này bằng cách gọi sau đây trên dụ WebSettings của WebView:

myWebView.getSettings().setSavePassword(false); 

Câu trả lời này cũng có thể tỏa sáng một số ánh sáng về vấn đề này: Memory leak in WebView

Họ chỉ ra một giải pháp cho điều này, đó là:

webView = new WebView(getApplicationContext()); 
Các vấn đề liên quan