(۱۳۹۴/۱۲/۰۸, ۱۰:۰۲ ق.ظ)sohrabjam نوشته: سلام دوستان
چگونه میوشد برای وب ویو کش درست کرد؟
یعنی وفتی کاربر یکبار وارود وب ویو می شود وبارگذاری انجام میوشد وبعد زا خروج دوباره به بارگذاری مجدد محتوی داحل وب ویو از اینترنت نباشد.
سلام
اگه اشتباه نکرده باشم شما میخواید یه حافظه درست کنید برای webView که در اجرای دوباره آن به آخرین آدرسی که درونش بوده بره.
شما برای این کار دوتا اکتیویتی میخواهید. و یک کلاس از نوع Application که کار ذخیره را انجام دهد.
قبل از هرکاری دسترسی های زیر رو به برنامتون بدید
کد پیاچپی:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
بعد یک کلاس به ایجاد کنید و اون رو از Application مشتق کنید. مثل کلاس زیر که بعنوان نمونه میذارمش
کد پیاچپی:
import java.io.File;
import android.app.Application;
import android.os.Environment;
public class ApplicationExt extends Application
{
protected File extStorageAppBasePath;
protected File extStorageAppCachePath;
@Override
public void onCreate()
{
super.onCreate();
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()))
{
File externalStorageDir = Environment.getExternalStorageDirectory();
if (externalStorageDir != null)
{
extStorageAppBasePath = new File(externalStorageDir.getAbsolutePath() +
File.separator + "Android" + File.separator + "data" +
File.separator + getPackageName());
}
if (extStorageAppBasePath != null)
{
extStorageAppCachePath = new File(extStorageAppBasePath.getAbsolutePath() +
File.separator + "cache");
boolean isCachePathAvailable = true;
if (!extStorageAppCachePath.exists())
{
isCachePathAvailable = extStorageAppCachePath.mkdirs();
}
if (!isCachePathAvailable)
{
extStorageAppCachePath = null;
}
}
}
}
@Override
public File getCacheDir()
{
if (extStorageAppCachePath != null)
{
return extStorageAppCachePath;
}
else
{
return super.getCacheDir();
}
}
}
اکتیویتی اول را بصورت زیر تغیر بدید
کد پیاچپی:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<Button android:id="@+id/startSecondActivityBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="Start second activity"/>
<WebView android:id="@+id/webView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
</LinearLayout>
و کلاس متناطر آن دستورات زیر را پیاده سازی کنید
کد پیاچپی:
import java.io.File;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
public class MainActivity extends Activity implements OnClickListener
{
protected WebView webView;
protected Button startSecondActivityBtn;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
webView = ((WebView)findViewById(R.id.webView));
startSecondActivityBtn = ((Button)findViewById(R.id.startSecondActivityBtn));
startSecondActivityBtn.setOnClickListener(this);
webView.getSettings().setSupportZoom(true);
webView.getSettings().setBuiltInZoomControls(true);
webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
webView.setScrollbarFadingEnabled(true);
webView.getSettings().setLoadsImagesAutomatically(true);
webView.setWebViewClient(new WebViewClient());
webView.loadUrl("http://www.google.com");
}
@Override
protected void onDestroy()
{
webView.clearCache(true);
super.onDestroy();
}
@Override
public File getCacheDir()
{
return getApplicationContext().getCacheDir();
}
@Override
public void onClick(View v)
{
if (v == startSecondActivityBtn)
{
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);
}
}
}
حالا اکتیوتی دوم رو بصورت زیر تغییر بره
کد پیاچپی:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<WebView android:id="@+id/webView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
</LinearLayout>
و در کلاس متناطر با کدهای زیر را قرار بدید
کد پیاچپی:
import java.io.File;
import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class SecondActivity extends Activity
{
protected WebView webView;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
webView = ((WebView)findViewById(R.id.webView));
webView.getSettings().setSupportZoom(true);
webView.getSettings().setBuiltInZoomControls(true);
webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
webView.setScrollbarFadingEnabled(true);
webView.getSettings().setLoadsImagesAutomatically(true);
webView.setWebViewClient(new WebViewClient());
webView.loadUrl("http://www.google.com");
}
@Override
public File getCacheDir()
{
return getApplicationContext().getCacheDir();
}
}
از برنامه اجرا بگیرید. ببینید نتیجه چطوریه. امیدوارم همون چیزی باشه که شما میخواهید.
نکته ای که باید بگم تا حد امکان از اندروید های پایین تر از 3 استفاده نکنید. تا نتیجه به خوبی نمایش داده بشه
موفق باشید