অ্যান্ড্রয়েড ওয়েবভিউ এবং লোকালস্টোরেজ


242

আমার একটি ওয়েবভিউ নিয়ে একটি সমস্যা রয়েছে যা কোনও HTML5অ্যাপ্লিকেশন দ্বারা লোকালস্টোরারে অ্যাক্সেস করতে পারে । টেস্ট এইচটিএমএল ফাইলটি আমাকে জানিয়ে দেয় যে স্থানীয় স্টোরেজটি আমার ব্রাউজার (যেমন। webview) দ্বারা সমর্থিত নয় । আপনার যদি কোন পরামর্শ থাকে ..

package com.test.HelloWebView; 
import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.KeyEvent; 
import android.webkit.WebChromeClient; 
import android.webkit.WebSettings; 
import android.webkit.WebStorage; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 
public class HelloWebView extends Activity { 
WebView webview; 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    webview = (WebView) findViewById(R.id.webview); 
    webview.getSettings().setJavaScriptEnabled(true); 
    webview.setWebViewClient(new HelloWebViewClient()); 
    webview.loadUrl("file:///android_asset/test.html"); 
    WebSettings settings = webview.getSettings(); 
    settings.setJavaScriptEnabled(true); 
    settings.setDatabaseEnabled(true); 
    String databasePath = this.getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath(); 
    settings.setDatabasePath(databasePath);
    webview.setWebChromeClient(new WebChromeClient() { 
    public void onExceededDatabaseQuota(String url, String databaseIdentifier, long currentQuota, long estimatedSize, long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater) { 
            quotaUpdater.updateQuota(5 * 1024 * 1024); 
        } 
    }); 
} 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) { 
        webview.goBack(); 
        return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 
private class HelloWebViewClient extends WebViewClient { 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
        view.loadUrl(url); 
        return true; 
    } 
}
} 

উত্তর:


518

নিম্নলিখিত অনুপস্থিত ছিল:

settings.setDomStorageEnabled(true);

1
একই :) অনেক ধন্যবাদ আপনার নিশ্চিত হওয়া উচিত যে আপনি কমপক্ষে অ্যান্ড্রয়েড ২.১ এর পরের দিকে লক্ষ্য রেখেছেন: অ্যান্ড্রয়েড যুক্ত করুন: minSdkVersion = "7" আপনার ম্যানিফেস্টে এবং প্রজেক্ট বিল্ড টার্গেটকে (গ্রহনে) কমপক্ষে ২.১ হতে পরিবর্তন করুন।
ডানমাক্স

45

সেটডাটাবেসপথ () পদ্ধতিটি এপিআই লেভেল 19-এ অবমুক্ত করা হয়েছিল I আমি আপনাকে স্টোরেজ লোকেলের ব্যবহারের পরামর্শ দিচ্ছি:

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

1
@ রম স্বরূপ সম্ভবত আপনার জন্য স্থানীয় স্টোরেজ সক্ষম করতে কেবল সেটডমস্টোরেজইনেবল (সত্য) ব্যবহার করুন সম্ভবত আপনি শেষ সংস্করণটি অ্যান্ড্রয়েড এবং ডিভাইস ব্যবহার করেন, এবং আপনার এই সমস্যাটি ঠিক দেখা দেয়নি? (সম্ভবত আপনার কাছে স্থানীয় স্টোরেজ সক্ষম করতে কেবল সেটডমস্টোরেজইনএবলড (সত্য) ব্যবহার করুন) তবে অ্যাপ্লিকেশন পুনরায় চালু হওয়ার পরে স্থানীয় স্টোরেজ ব্যবহার করে অ্যান্ড্রয়েডের কয়েকটি সংস্করণ (Exm: old) সমস্যা এই লোকেল স্টোরেজটি হারিয়ে ফেলে। কেউ এই সমস্যা দেখা দিয়েছে এবং তারা আমার উত্তরে ভোট দেয় up আপনার কোনও ধারণা থাকলে আপনি আরও একটি উত্তর যুক্ত করতে পারেন।
মিঃবয়ফক্স

আমি আপনার সমাধানটি দিয়ে চেষ্টা করেছি তবে এখনও অ্যাপ্লিকেশনটি মারা / পুনরায় চালু হওয়ার পরেও লোকালস্টোরেশন বজায় থাকে না তবে অনেক সময় পুনরায় চালু করার পরে লোকালস্টোরেশন পুনরায় কাজ শুরু করে এবং সেখানে সঞ্চিত ডেটা সঠিকভাবে উদ্ধার করা হয়। এটি অস্বাভাবিক তবে এটি আমার ক্ষেত্রে ঘটে। (সনি এক্স্পেরিয়া এসপিতে পরীক্ষিত)
রাম পাত্র

@ রম্বরুপ আমি Nexus4 ব্যবহার করছি এবং স্থানীয় স্টোরেজ নিয়ে আমারও কোনও সমস্যা নেই। তবে আমি যখন স্যামসাং গ্যালাক্সি এসআইআইতে পরীক্ষা করেছি তখন এই সমস্যা ছিল। আমি বলছি না যে সমস্ত ডিভাইসগুলি এমনভাবে কাজ করছে, কেবল কিছু ডিভাইসে এটি রয়েছে।
mr.boyfox

25

অ্যাপ্লিকেশন পুনরায় চালু হওয়ার পরে ডেটা হারিয়ে যাওয়ার বিষয়ে আমারও সমস্যা ছিল। এটি সাহায্য করে:

webView.getSettings().setDatabasePath("/data/data/" + webView.getContext().getPackageName() + "/databases/");

এটি ডেটা ক্ষতির সমস্যার সমাধান করেছে তবে এটি কী? একটু বিস্তৃত করবেন?
সোরিন কোমানেস্কু

এপিআই বিবরণ থেকে: "সঠিকভাবে কাজ করতে ডেটাবেস সঞ্চয়স্থান API- এর জন্য জন্য, এই পদ্ধতি একটি পাথ যা আবেদন লিখতে পারেন সাথে কল করা আবশ্যক।" developer.android.com/reference/android/webkit/...
iTake

15

বিল্ড টার্গেট অ্যান্ড্রয়েড 4.4W এর সাথে সংকলিত আমার অ্যান্ড্রয়েড 4.2.2 এ কাজ করে এমন একটি সমাধান:

WebSettings settings = webView.getSettings();
settings.setDomStorageEnabled(true);
settings.setDatabaseEnabled(true);

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
    File databasePath = getDatabasePath("yourDbName");
    settings.setDatabasePath(databasePath.getPath());
}

4

যদি আপনার অ্যাপ্লিকেশন একাধিক ওয়েবভিউ ব্যবহার করে তবে আপনার এখনও সমস্যা হবে: লোকালস্টোরেশন সমস্ত ওয়েবভিউ জুড়ে সঠিকভাবে ভাগ করা হয় না।

আপনি যদি একাধিক ওয়েবভিউতে একই ডেটা ভাগ করতে চান তবে জাভা ডাটাবেস এবং জাভাস্ক্রিপ্ট ইন্টারফেস দিয়ে এটি মেরামত করার একমাত্র উপায়।

গিথুব-এর এই পৃষ্ঠাটি কীভাবে এটি করবে তা দেখায়।

এই সাহায্য আশা করি!


ওহে! হাইব্রিড অ্যাপ্লিকেশনগুলির জন্য আমরা এই লোকাল স্টোরেজ ফিক্স এবং কিছু অন্যান্য দুর্দান্ত জিনিসগুলির চারপাশে একটি সরঞ্জাম তৈরি করেছি: একাধিক ওয়েবভিউ সহ অ্যাপ্লিকেশন তৈরির জন্য একটি ওপেন সোর্স ফ্রেমওয়ার্ক c আমরা লোকালস্টোরেশন বাড়িয়েছি এবং ওয়েবভিউয়ের মধ্যে একটি "টক" করতে একটি পাবসব প্লাগইন যুক্ত করেছি। একটি সময়ে কটাক্ষপাত আছে cobaltians.org
Guillaume, Gendre

ধন্যবাদ. আমার বস সবে একই প্রশ্ন জিজ্ঞাসা। এই সাহায্য।
hsu.tw

0

আপনার যদি একাধিক ওয়েবভিউ থাকে তবে লোকালস্টোরেজগুলি সঠিকভাবে কাজ করে না।
দুটি পরামর্শ:

  1. "@ গুইলিউম গেন্ড্রে" ব্যাখ্যা করেছেন এমন স্থানীয় স্টোরের স্থানীয় পর্যালোচনা জাভা ডাটাবেস ব্যবহার করে (অবশ্যই এটি আমার পক্ষে কার্যকর হয় না)
  2. জসনের মতো স্থানীয় স্টোরেজ কাজ করে, সুতরাং "কী: মান" হিসাবে সঞ্চয় করে y

ওহে! আমরা একটি সরঞ্জামও তৈরি করেছি: একাধিক ওয়েবভিউ সহ অ্যাপ্লিকেশন তৈরির জন্য একটি ওপেন সোর্স কাঠামো কোবাল্ট। আমরা লোকালস্টোরেশন বাড়িয়েছি এবং ওয়েবভিউয়ের মধ্যে একটি "টক" করতে একটি পাবসব প্লাগইন যুক্ত করেছি। ( cobaltians.org )
গিলিয়াম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.