Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我们可以在android WebView中保存登录数据吗?_Android_Login_Webview - Fatal编程技术网

我们可以在android WebView中保存登录数据吗?

我们可以在android WebView中保存登录数据吗?,android,login,webview,Android,Login,Webview,我的网站需要登录才能使用,那么是否有办法为用户保存登录数据,以便他们不会在每次进入网络视图(如firebase或Cookie等)时登录? 如果你需要分享我的代码,请告诉我 多谢各位 编辑1: 这是MainActivity.java文件代码: package com.company.app; import android.content.Context; import android.content.Intent; import android.net.ConnectivityManager;

我的网站需要登录才能使用,那么是否有办法为用户保存登录数据,以便他们不会在每次进入网络视图(如firebase或Cookie等)时登录? 如果你需要分享我的代码,请告诉我

多谢各位

编辑1:

这是MainActivity.java文件代码:

package com.company.app;

import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Build;
import android.os.Handler;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.CookieManager;
import android.webkit.CookieSyncManager;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends AppCompatActivity {

WebView webView;
SwipeRefreshLayout swipe;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    findViewById(R.id.webView).setVisibility(View.GONE);

    swipe = (SwipeRefreshLayout)findViewById(R.id.swipe);
    swipe.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            WebAction();
        }
    });

    CookieSyncManager.createInstance(this);
    CookieManager cookieManager = CookieManager.getInstance();
    cookieManager.setAcceptCookie(true);

    WebView webview = new WebView(this);
    WebSettings ws = webview.getSettings();
    ws.setSaveFormData(true);
    ws.setSavePassword(true); // Not needed for API level 18 or greater (deprecated)


    WebAction();



}

public void WebAction(){

    webView = (WebView) findViewById(R.id.webView);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setAppCacheEnabled(true);

    webView.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        // chromium, enable hardware acceleration
        webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
    } else {
        // older android version, disable hardware acceleration
        webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
    }


    String myURL = "https://www.myURL.com/";

    CookieSyncManager.createInstance(this);
    CookieManager cookieManager = CookieManager.getInstance();
    cookieManager.setAcceptCookie(true);

    WebView webview = new WebView(this);
    WebSettings ws = webview.getSettings();
    ws.setSaveFormData(true);
    ws.setSavePassword(true); // Not needed for API level 18 or greater (deprecated)


    webView.loadUrl(myURL);
    swipe.setRefreshing(true);
    webView.setWebViewClient(new WebViewClient(){

        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {

            webView.loadUrl("file:///android_asset/error.html");

        }

        public void onPageFinished(WebView view, String url) {
            // do your stuff here
            swipe.setRefreshing(false);

            findViewById(R.id.webView).setVisibility(View.VISIBLE);


        }

    });

}


@Override
public void onBackPressed(){

    if (webView.canGoBack()){
        webView.goBack();
    }else {
        finish();
    }
}
}我找到了答案

我们只需要添加以下内容:webView.getSettings.setDomStorageEnabledtrue;此外还有.webView.getSettings.setJavaScriptEnabledtrue


现在我们可以删除cookies代码,保存数据和登录

编辑: 如果不起作用,尽量不要删除cookies代码。

我找到了答案

我们只需要添加以下内容:webView.getSettings.setDomStorageEnabledtrue;此外还有.webView.getSettings.setJavaScriptEnabledtrue


现在我们可以删除cookies代码,保存数据和登录

编辑:
如果无效,请尝试不要删除cookies代码。

尝试通过javascript注入获取值

webView.setWebViewClient(new WebViewClient(){
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            webView.loadUrl(
                "javascript:(function() { " +
                    "var element = document.getElementById('hplogo');"
                    + "element.parentNode.removeChild(element);" +
                "})()");
        }
    });

尝试通过javascript注入获取值

webView.setWebViewClient(new WebViewClient(){
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            webView.loadUrl(
                "javascript:(function() { " +
                    "var element = document.getElementById('hplogo');"
                    + "element.parentNode.removeChild(element);" +
                "})()");
        }
    });

很清楚,你的应用程序中有一个用户用来访问你网站的WebView,对吗?是的,我在我的应用程序中使用WebView。据我所知,WebViews现在会自动保存cookies,所以您可以像大多数网站一样使用cookies来存储登录会话吗?我在应用程序中添加了一个代码来接受cookies,但它不起作用。我会将代码添加到问题中,以便您可以查看是否有问题。要明确的是,你的应用程序中有用户用来访问你网站的WebView,对吗?是的,我在我的应用程序中使用WebView。据我所知,WebViews现在会自动保存cookies,所以您可以像大多数网站一样使用cookies来存储登录会话吗?我在应用程序中添加了一个代码来接受cookies,但它不起作用。我会将代码添加到问题中,以便您可以查看是否有问题。很高兴您能够找到答案!现在我们可以删除cookies代码,保存数据和登录名了。请解释一下好吗?在android中关闭你的混合应用程序并再次运行后,是否保存cookies退出?我使用了上述方法,但对我无效。你能给我建议更好的方法吗?很高兴你能找到它!现在我们可以删除cookies代码,保存数据和登录名了。请解释一下好吗?在android中关闭你的混合应用程序并再次运行后,是否保存cookies退出?我使用了上述方法,但对我无效。你能给我建议更好的方法吗。。