2012-10-22 7 views
6

मेरे पास एक बटन है जो दबाए जाने पर एक वेबव्यू (एक गतिविधि के रूप में) ट्विटर लॉगिन पृष्ठ खोलता है। मैं ट्विटर 4j संस्करण 2.2.6 का उपयोग कर रहा हूं। समस्या यह है- जब मैं एमुलेटर या मेरे सैमसंग ग्लैक्सी 2 पर क्लिक करता हूं तो यह किसी भी बग को पूरी तरह से समझता है, लेकिन जब मैं अपने सैमसंग गैलेक्सी 3 जीटी-आई 3 9 00 (और मेरे दोस्तों को एक ही फोन) पर बटन क्लिक करता हूं तो मुझे मिलता है निम्न अपवाद:अजीब SQLiteException सभी उपकरणों में नहीं

android.database.sqlite.SQLiteException: ऐसी कोई तालिका: पासवर्ड:, जबकि संकलन: (? == मेजबानी) का चयन करें उपयोगकर्ता नाम, पासवर्ड पासवर्ड कहाँ से android.database.sqlite पर । SQLiteCompiledSql.native_compile (मूल विधि) atroid.database.sqlite.SQLiteCompiledSql। (SQLiteCompiledSql.java:68) android.dat पर abase.sqlite.SQLiteProgram.compileSql (SQLiteProgram.java:143) android.database.sqlite.SQLiteProgram.compileAndbindAllArgs पर (SQLiteProgram.java:361) android.database.sqlite.SQLiteProgram पर। (SQLiteProgram.java:127) android.database.sqlite.SQLiteProgram पर। (SQLiteProgram.java:94) android.database.sqlite.SQLiteQuery पर। (SQLiteQuery.java:53) android.database.sqlite.SQLiteDirectCursorDriver.query (SQLiteDirectCursorDriver.java:47 पर) atroid.database.sqlite.SQLiteDatabase.rawQueryWithFactory (SQLiteDatabase.java:1684) atroid.database.sqlite.SQLiteDatabase.queryWithFactory (SQLiteDatabase.java:1569) atroid.database.sqlite.SQLiteDatabase.query (SQLiteDatabase .java: 1525) android.dat पर abase.sqlite.SQLiteDatabase.query (SQLiteDatabase.java:1605) android.webkit.WebViewDatabase.getUsernamePassword (WebViewDatabase.java:990) पर android.webkit.BrowserFrame.handleMessage (BrowserFrame.java:589) पर एंड्रॉयड पर । os.Handler.dispatchMessage (Handler.java:99) android.os.Looper.loop (Looper.java:137) atroid.webkit.WebViewCore $ WebCoreThread.run (WebViewCore.java:950) जावा पर। lang.Thread.run (Thread.java:856)

वेबव्यू एक गतिविधि है (गतिविधि फैली) मैं दुर्घटना के बिंदु पर मुक्त अंतरिक्ष के बहुत सारे है:

total- १२१८७२१३८२४ फ्री- 4315947008

दुर्घटना में मेरी विन्यास:

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 

डिवाइस विशेषताएं:

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 

पर्यावरण:

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 

अनुमतियां:

<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"/> 

वेबव्यू में मैं किसी भी sqllite लेन-देन या कुछ भी नहीं शामिल किए गए फ्लॉप।

इस लाइन

के बारे में मेरा उत्तर देख मैं एक जड़ उपयोगकर्ता नहीं हूँ (जिसका अर्थ है मैं लिखने अधिकार है)

वेबव्यू शामिल कोड है:

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); 
    } 

मुझे यह लिंक मिला है जिसमें कुछ समानता है:

मैं एक लंबे सप्ताह के लिए भी कई धागे पर देखा है और मैं बहुत निराश हूँ के बारे में यह

किसी को भी है कोई विचार? धन्यवाद

उत्तर

1

यह पता चला है कि मैं कहीं और इस दो पंक्तियों कोड में था के रूप में:

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

इस लाइनों जहाँ मेरे वेबव्यू के लिए कैशिंग स्पष्ट करने के लिए माना जाता है, लेकिन इस लाइनों केवल में पिछले उपकरणों पर काम किया, गैलेक्सी 3 और शायद अन्य डिवाइस जैसे यह निकलता है, शुरूआत में वेबव्यू इस डेटाबेस को फिर से नहीं बना रहा है, इसलिए एसक्लाइट अपवाद इसलिए था क्योंकि इसमें वास्तव में कोई टेबल नहीं था ...

उस से सावधान रहने की आवश्यकता है- लाइन मैंने लिखा था भ्रामक था:

+0

मैं भी sqllite के लिए किसी भी उपयोग के बिना ठीक उसी समस्या है, लेकिन मैंने नहीं किया कैच के साथ कुछ खास बनाओ ई !! और नहीं पता कि अब क्या देखना है! – AbdelHady

0

इस दुर्घटना पुन: पेश करने के लिए मुश्किल है "वेबव्यू में मैं नहीं किसी भी sqllite लेन-देन या कुछ भी नहीं शामिल किया जाता था", लेकिन मैं ठीक उसी अपवाद हो रही थी (यहां तक ​​कि उल्लेख "ऐसी कोई तालिका: पासवर्ड") और मैं एक गतिविधि के लिए जा रहा है, तो एक 2 गतिविधि के लिए, और फिर एक संवाद में एक WebView खोलने ये पर्चा तत्व युक्त HTML प्रदर्शित करके यह पुन: पेश कर सकते हैं:

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

निकाला जा रहा है कि type="password" कि प्रपत्र तत्व से रोका यह दुर्घटनाग्रस्त होने से।

वेबव्यू एक एसक्लाइट डीबी में बाद में उपयोग के लिए पासवर्ड सहेजने का प्रयास करता है।मुझे यकीन है कि के लिए नहीं कह सकता, लेकिन मुझे लगता है यह सबसे डेवलपर्स के लिए वांछनीय व्यवहार नहीं है, इसलिए यदि आप चाहते हैं तो आप इस सुविधा बुला WebView के WebSettings उदाहरण पर का पालन करते हुए बंद कर सकते हैं:

myWebView.getSettings().setSavePassword(false); 

इस उत्तर Memory leak in WebView

वे इस के लिए एक समाधान का कहना है, जो है: भी इस मुद्दे पर कुछ रोशनी डालेगी सकता

webView = new WebView(getApplicationContext()); 
संबंधित मुद्दे