آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

ذخیره کردن اطلاعات وب ویو

علی  11 سال پیش  10 سال پیش
+1 0

سلام:

من از یک لینکی اطلاعات رو انلاین می خونم و در وب ویو نمایش می دم. تا اینجا درسته .

حالا اگه بخوام همین اطلاعات ذخیره بشه داخل گوشی از چی استفاده کنم که هر بار با خواندن اطلاعات آنلاین  و یا تغییر آن ذخیره بشه؟ 

+1 0
این سوال قبلا پرسیده شده و به جواب رسیده : لینک (11 سال پیش)
0 0
محمد حسین جان بله دیدم ولی وقتی اطلاعات رو تغییر میدم و انلاین می خونم دیگه لود نمیکنه کلا قبلی رو میاره. (11 سال پیش)
+1 0
باید براش سیستم کش بنویسید و کش خود سیستم رو غیر فعال کنید . (11 سال پیش)
0 0
متاسفانه بلد نیستم محمد حسین جان. (11 سال پیش)
+2 0
علی جان فکر کنم اگر از این مود استفاده کنی مشکلت حل میشه. WebSettings.LOAD_CACHE_ELSE_NETWORK باز تست کنید اطلاع بدید. (10 سال پیش)
+1 0
ممنون علی جان واقعا جواب داد همین یه تیکه کد. فقط بعضی وقتها همون جا اطلاعات دوباره بارگزاری نمیشه و اگر چند ساعت دیگه امتحان کنم دوباره بارگزاری جدید اعمال میشه و میتونم آفلاین همون اطلاعات جدید رو ببینم. این نمیدونم ربطی با تایم کش داره یا نه؟ (10 سال پیش)
+1 0
به تایم ربط داره، ولی نه تایم لوکال، وقتی شما سایت رو لود میکنید، سرور یک هدر که میزان کش توی اون ست میشه رو به وب ویو ارسال میکنه، اونجا میتونید بهش بگید که میزان کش چقدر باشه. اگر سورس سایت های دیگه رو باز کنید میزان کش هر سایت رو میتونید ببینید. (10 سال پیش)
+1 0
اگر میخواید سایت های دیگران رو لود کنید، بهتره به صورت لوکال چک کنید اینترنت وصله یا خیر، بعد تصمیم بگیرید با چه مودی وب ویو رو ست کنید. (10 سال پیش)
+1 0
نه از سرور خودم یه فایل html درست کردم که بتونم هر زمان تغییر بدم. الان دفعه اول وب ویو لود میشه درست. بعد تو سرور همون جا میرم تغییر میدم و میام دوباره سمت اندروید دوباره لود رو انجام میدم . بعضی وقتها همون جا تغییر میکنه . بعضی وقتها هم همون جا اصلا تغییر نمی کنه و باید چند دقیقه دیگه بیام دوباره لود کنم. در نهایت پس باید سمت سرور کش رو تنظیم کنم؟ درسته؟ (10 سال پیش)
+1 0
درسته، شما میزان کش رو باید توی هدر ارسال کنی. (10 سال پیش)
 برای این سوال 5 پاسخ وجود دارد.
پاسخ به سوال 
علی  11 سال پیش
0 0

مثل این باشه؟ ولی چطوری کش خود سیستم غیرفعال شه؟

 
webView = (WebView) rootView.findViewById(R.id.webView1);
        webView.getSettings().setAppCacheMaxSize(1024*1024*8);
		webView.getSettings().setAppCachePath( getActivity().getCacheDir().getAbsolutePath() );
		webView.getSettings().setAllowFileAccess( true );
		webView.getSettings().setAppCacheEnabled( true );
		webView.getSettings().setJavaScriptEnabled( true );
		webView.getSettings().setCacheMode( WebSettings.LOAD_DEFAULT ); // load online by default
		webView.loadUrl( "http://www.google.com" );
+1 0
الان شما نوشتید setAppCacheEnabled( true ); اینو میکنید false و setCacheMode هم تعریف نمیکنید ، دیتای گرفته شده رو در فایل ذخیره میکنید و عین کش در وب سرویس عمل میکنید . (11 سال پیش)
0 0
امکانش هست بنویسید ؟ من نتونستم درستش کنم :( (11 سال پیش)
+1 0
کدش کمی طولانی هست و بهم پیوسته ولی ، سیستمش شبیه به سیستم کش وب سرویس استاد هست ، برای گرفتن سورس سایت ها هم قبلا سوالی پرسیده شده که در بالا لینک قرار دادم (11 سال پیش)
پاسخ به سوال 
علی  11 سال پیش
0 0

محمد حسین جان من گیر کردم . لطف می کنی بگی data رو چکار کنم که بخونه ؟

 
   mWebView = (WebView) findViewById(R.id.webviewMain);
        WebSettings settings = mWebView.getSettings();
        settings.setJavaScriptEnabled(true);
        mWebView.getSettings().setAppCacheEnabled( false );

        if (enableCache) {
            saveToCache(System.currentTimeMillis(), data);
        }
        
       
        if (enableCache) {
        String data = null;
            data = readFromCache();
        }

        if (data == null) {
        	
        	 mWebView.loadUrl(URL);
        	
          
        } 
      
         
    }
    

    private void saveToCache(long when, String data) {
        ObjectOutputStream outputStream = null;
        try {
            outputStream = new ObjectOutputStream(new FileOutputStream(cacheDir + "/" + cacheFileName));
            outputStream.writeLong(when);
            outputStream.writeInt(data.length());
            outputStream.write(data.getBytes());
        }
        catch (StreamCorruptedException e) {
            e.printStackTrace();
        }
        catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (outputStream != null) {
                try {
                    outputStream.flush();
                }
                catch (IOException e) {
                    e.printStackTrace();
                }
                try {
                    outputStream.close();
                }
                catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    
    private String readFromCache() {
        ObjectInputStream inputStream = null;
        try {
            inputStream = new ObjectInputStream(new FileInputStream(cacheDir + "/" + cacheFileName));

            long when = inputStream.readLong();
            long now = System.currentTimeMillis();
            if (now - when > cacheExpireTime * 1000) {
                new File(cacheDir + "/cache.dat").delete();
                return null;
            }

            int bytesLength = inputStream.readInt();
            byte[] buffer = new byte[bytesLength];
            inputStream.readFully(buffer, 0, bytesLength);
            String output = new String(buffer);
            return output;
        }
        catch (StreamCorruptedException e) {
            e.printStackTrace();
        }
        catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (inputStream != null) {
                    inputStream.close();
                }
            }
            catch (IOException e) {
                e.printStackTrace();
            }
        }

        return null;
    }
    
0 0
یه متدی در وب ویو هست برای بارگذاری از سورس به جای لود URl الان اسمش رو یادم نیست ولی باید از اون استفاده کنی. (11 سال پیش)
0 0
محمد جان منم گشتم پیدا نکردم خیلی لازمش دارم یه کمکی بکن من مشکلم حل بشه . (11 سال پیش)
پاسخ به سوال 
کاشی زاده  11 سال پیش
+1 0

با این کد میتونید سورس HTML رو در یک String بریزید و داخل وب ویو نمایش بدید :

         webview.loadData(html_value,"text/html","UTF-8");
پاسخ به سوال 
علی  10 سال پیش
0 0

محمد جان من نمی تونم درستش کنم ، امکانش هست این کد رو کامل کنی تا درست بشه؟

 class MyJavaScriptInterface {

		@SuppressWarnings("unused")
		public void showHTML(String html) {

		}
	}

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		browser = (WebView) findViewById(R.id.webkit);
		browser.getSettings().setAppCacheEnabled(false);
		browser.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
		browser.getSettings().setJavaScriptEnabled(true);
		browser.addJavascriptInterface(new MyJavaScriptInterface(), "HTMLOUT");
		browser.loadUrl("http://192.168.1.1/android/html/aboutus/about.html");

	}




	private void saveToCache(long when, String data) {
		ObjectOutputStream outputStream = null;
		try {
			outputStream = new ObjectOutputStream(new FileOutputStream(cacheDir
					+ "/" + cacheFileName));
			outputStream.writeLong(when);
			outputStream.writeInt(data.length());
			outputStream.write(data.getBytes());
		} catch (StreamCorruptedException e) {
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (outputStream != null) {
				try {
					outputStream.flush();
				} catch (IOException e) {
					e.printStackTrace();
				}
				try {
					outputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}

	private String readFromCache() {
		ObjectInputStream inputStream = null;
		try {
			inputStream = new ObjectInputStream(new FileInputStream(cacheDir
					+ "/" + cacheFileName));

			long when = inputStream.readLong();
			long now = System.currentTimeMillis();
			if (now - when > cacheExpireTime * 1000) {
				new File(cacheDir + "/cache.dat").delete();
				return null;
			}

			int bytesLength = inputStream.readInt();
			byte[] buffer = new byte[bytesLength];
			inputStream.readFully(buffer, 0, bytesLength);
			String output = new String(buffer);
			return output;
		} catch (StreamCorruptedException e) {
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (inputStream != null) {
					inputStream.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

		return null;
	}
}
0 0
مشکلش چیه ؟ جاهایی که ایراد داره رو بگید تا سریع تر بر طرف بشه . (10 سال پیش)
0 0
مشکل الان اینجاست که نمی دونم چطوری اون آدرس url رو saveToCache کنم . این مرحله اول . (10 سال پیش)
0 0
لینک (10 سال پیش)
0 0
محمد جان این روش وقتی گوشی خاموش و روشن بشه اطلاعاتی نیست دیگه . درسته ؟ من نمی خوام اطلاعات رو از دست بدم . این مشکل یه راه دیگه داره؟ نمیشه تو دیتابیس ذخیره کرد این فرایند رو؟ (10 سال پیش)
+1 0
نه ، شما اطلاعات رو کش میکنی موندگار هست تا زمانی که خودت از بین ببریشون (10 سال پیش)
پاسخ به سوال 
علی  10 سال پیش
+1 0

این کد وب ویو :

هر کسی دوست داشت استفاده کنه ...

 ConnectionDetector cd;
	WebView engine;



cd = new ConnectionDetector(this); engine = (WebView) findViewById(R.id.webView1); engine.getSettings().setJavaScriptEnabled(true); engine.getSettings().setLoadsImagesAutomatically(true); engine.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); String appCachePath; engine.getSettings().setDomStorageEnabled(true); // Set cache size to 8 mb by default. should be more than enough engine.getSettings().setAppCacheMaxSize(1024 * 1024 * 8); appCachePath = getApplicationContext().getCacheDir().getAbsolutePath(); engine.getSettings().setAppCachePath(appCachePath); engine.getSettings().setAllowFileAccess(true); engine.getSettings().setAppCacheEnabled(true); engine.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); if (cd.isConnectingToInternet()) { appCachePath = getApplicationContext().getCacheDir() .getAbsolutePath(); engine.getSettings().setAppCachePath(appCachePath); engine.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); startWebView("http://192.168.1.1/android/html/help/help.html"); } else { System.err.println("CACHE OR NETWROK"); engine.getSettings().setCacheMode( WebSettings.LOAD_CACHE_ELSE_NETWORK); startWebView("http://192.168.1.1/android/html/help/help.html"); } } private void startWebView(String url) { // Create new webview Client to show progress dialog // When opening a url or click on link engine.setWebViewClient(new WebViewClient() { ProgressDialog progressDialog; // If you will not use this method url links are opeen in new brower // not in webview public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } // Show loader on url load public void onLoadResource(WebView view, String url) { if (progressDialog == null) { // in standard case YourActivity.this progressDialog = new ProgressDialog(ShowWebView.this); progressDialog.setMessage("Loading..."); progressDialog.show(); } } public void onPageFinished(WebView view, String url) { try { if (progressDialog.isShowing()) { progressDialog.dismiss(); progressDialog = null; } } catch (Exception exception) { exception.printStackTrace(); } } }); // Load url in webview engine.loadUrl(url); }

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .