Android - 从WebView保存数据

时间:2015-08-31 06:49:58

标签: android android-webview

目前我在我的应用程序中使用WebView来加载网页。我在WebView中加载了以下网页网址:

http://domain_name/app/

如果用户未登录,则会将URL重定向到另一个URL,即登录URL。这是登录URL:

http://domain_name/app/index.php?r=site/login

用户输入用户名和密码后,会将其重定向到以下网址:

http://domain_name/app/index.php?r=site/homepage

当用户成功登录后,将向用户显示主页。

我的问题是,当从“最近”列表中删除应用程序时,登录数据将丢失,应用程序将重定向到“登录”屏幕。

我有一种方法可以解决这个问题。首先是在用户成功登录后首先提供登录页面URL我将URL更改为主页URL而不是登录页面URL。

有没有其他方法可以解决此问题或以何种方式将登录数据保存到应用程序存储中?

2 个答案:

答案 0 :(得分:3)

我正在回答我自己的问题,我认为这对其他人有帮助。

最后,我通过内部和外部存储中的缓存解决了我的问题(如果可用,将数据保存到外部存储)

首先,我创建了自定义Application类,用于在内部或外部存储中创建缓存存储路径。

<强> MyApplication.java

import android.app.Application;
import android.os.Environment;

import java.io.File;

public class MyApplication 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();
    }
}

}

在Android Manifest文件中,我在application标记下提供了以下权限和应用程序名称。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
 <application
        android:name=".MyApplication"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
........................................
</application>

然后,如果缓存可用,则最后启用缓存以从存储加载。

mWebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);

答案 1 :(得分:1)

在加载页面之前使用:

CookieManager.getInstance().setAcceptCookie(true);

如果不起作用,请阅读CookieSyncManager以将浏览器Cookie存储同步到RAM和永久存储中。

对于Lollipop及以上,这应该足够了:

CookieManager.getInstance().setAcceptThirdPartyCookies(true);