2010-06-02 7 views
19

मेरे पास एक मूल एंड्रॉइड 2.1 एप्लिकेशन है जो वेब व्यू होस्ट करता है। मैं ऐसी साइट लोड करता हूं जिसमें जावास्क्रिप्ट शामिल है जो लोकल स्टोरेज सुविधा का उपयोग करता है। जब एप्लिकेशन चल रहा है स्थानीय स्टोरेज ठीक काम करता है। जब कुछ उपयोगकर्ता एप्लिकेशन से बाहर निकलते हैं और इसे पुनरारंभ करते हैं, तो सभी मान चले जाते हैं। मुझे इस समस्या को मेरे मोटोला डाइड्रॉइड या स्प्रिंट ईवीओ में नहीं देख रहा है, लेकिन इस मुद्दे के साथ क्षेत्र में उपयोगकर्ताओं की एक रिपोर्ट है।मेरा एंड्रॉइड एचटीएमएल एप्लिकेशन स्थानीय स्टोरेज में संग्रहीत मूल्यों को खो देता है जब यह बंद हो जाता है। कोई और इस मुद्दे को देखता है?

क्या कोई जानता है कि मुझे क्या याद आ रहा है? मैं निम्नलिखित ध्वज को सही पर सेट कर रहा हूं।

settings.setDomStorageEnabled(true); 
+0

आप जानते हैं कि उपकरणों अपने अनुप्रयोग के साथ इस समस्या हो रही है है? मुझे कम से कम एंड्रॉइड 2.x डिवाइस पर इस सुविधा के साथ किसी समस्या की जानकारी नहीं है। – CommonsWare

+0

ऐसा लगता है कि कुछ मोटोरोला ड्रॉइड असफल हो रहे हैं। मेरे पास कारखाने से डब्ल्यू/2.1 आया है और ऐसा लगता है कि यह ठीक काम कर रहा है। – Kevin

+0

http://stackoverflow.com/questions/4157184/android-making-webview-domstorage-persistant-after-app-closed – rdmueller

उत्तर

2
// Confimed on android 2.1 emulator 

// enable javascript localStorage 


WebSettings webSettings = myWebView.getSettings(); 

webSettings.setDomStorageEnabled(true); // localStorage 

// eg if your package 

// package www.myapp.whatever; 

// eg webSettings.setDatabasePath("/data/data/www.myapp.whatever/databases/"); 

webSettings.setDatabasePath("/data/data/packagename/databases/"); 

इस काम करता है

16

एंड्रॉयड में अपने स्वयं के WebView के लिए स्थानीय भंडारण के काम करने के लिए, आपको यकीन है कि WebView सही फ़ाइल उपयोग कर रहा है, और स्थानीय भंडारण इस तरह सक्षम किया गया है बनाने की जरूरत है :

String packageName = "com.dongshengcn.android"; 
WebSettings settings = webView.getSettings(); 
settings.setJavaScriptEnabled(true); 
settings.setDatabaseEnabled(true); 
settings.setDatabasePath("/data/data/"+packageName+"/databases"); 
settings.setDomStorageEnabled(true); 

जहां "com.dongshengcn.android" को अपने एंड्रॉइड ऐप पॅककेज नाम से बदला जाना चाहिए।

+5

पथ हार्डकोडिंग उचित समाधान नहीं है। इसका उपयोग करें .getAplicationContext()। getDir ("डेटाबेस", Context.MODE_PRIVATE)।getPath(); इसके बजाय यह तब भी काम करेगा यदि डेटा/डेटा/ पथ कुछ नए एपीआई संस्करण के साथ बदलता है। – MrMaffen

4

केवल इन दो पंक्तियों की जरूरत है:

this.getSettings().setDomStorageEnabled(true); //enable to use "window.localStorage['my']='hello1'", in webview js on >= android 2.0 
this.getSettings().setDatabasePath("/data/data/"+this.context.getPackageName()+"/databases/"); //if no set or wrong path, variables disappear on killed 
10

बस पूरा पिछली प्रतिक्रियाएं जो मेरे मामले में समस्या को हल करने की अनुमति नहीं दी है।

मैं एंड्रॉइड 4.1.1 के साथ काम कर रहा हूं। मेरा ऐप एक वेबव्यू के भीतर स्थानीय स्टोरेज का उपयोग कर रहा है और मुझे मूल प्रश्न के समान समस्या मिल रही थी: जब तक मैं ऐप को मार नहीं देता तब तक स्थानीय स्टोरेज ठीक काम करता है। इस मामले में, डेटा खो गया था।

मुझे पिछली प्रतिक्रियाएं से प्रेरणादायक करके, और विशेष रूप से @diyism से, मैं इस के साथ मेरी मुद्दे को हल करने में सक्षम था:

String databasePath = this.getApplicationContext().getDir("databases", Context.MODE_PRIVATE).getPath(); 
settingsMenu.setDatabasePath(databasePath); 

वास्तव में, setDatabasePath() दस्तावेज में लिखा है: to function correctly, this method must be called with a path to which the application can write

6

setDatabasePath() विधि एपीआई स्तर 19 में पदावनत किया गया था मैं तुम्हें इस तरह भंडारण स्थान के उपयोग की सलाह:

webView.getSettings().setDomStorageEnabled(true); 
webView.getSettings().setDatabaseEnabled(true); 
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { 
    webView.getSettings().setDatabasePath("/data/data/" + webView.getContext().getPackageName() + "/databases/"); 
} 
संबंधित मुद्दे

 संबंधित मुद्दे