Android Studio:Webview和Sessions Basics

时间:2017-06-07 20:57:37

标签: android webview

我的网页浏览效果如下:

    wv = (WebView) findViewById(R.id.wv);
    //Enable JavaScript
    wv.getSettings().setJavaScriptEnabled(true);
    wv.setFocusable(true);
    wv.setFocusableInTouchMode(true);
    //Set Render Priority To High
    wv.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
    wv.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
    wv.getSettings().setDomStorageEnabled(true);
    wv.getSettings().setDatabaseEnabled(true);
    wv.getSettings().setAppCacheEnabled(true);
    wv.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
    //Load Url
    wv.loadUrl("https://str8red.com/");

然后我有以下代码在单击按钮时运行:

    button.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            final RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);
            StringRequest stringRequest = new StringRequest(Request.Method.GET,"https://str8red.com/loggedincheck",

                    new Response.Listener<String>(){
                        @Override
                        public void onResponse(String response) {
                            textView.setText(response);
                            requestQueue.stop();
                        }
                    }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    textView.setText("Something went wrong");
                    error.printStackTrace();
                    requestQueue.stop();
                }
            });
            requestQueue.add(stringRequest);
        }
    });

地址只返回“True”或“False”字符串,具体取决于用户是否登录webview。好消息是它返回一个字符串,但它总是返回False,即使我已经使用webview登录到我的网站。我知道地址https://str8red.com/loggedincheck按预期工作,因为它既适用于网络浏览器,也适用于iOS应用。

我假设当点击按钮时它没有使用相同的webview,因此不知道用户是否登录。

我已经在网上找到了一个解决方案,但已经解开了。任何帮助将不胜感激。

如果您需要任何其他信息,请不要犹豫。

1 个答案:

答案 0 :(得分:1)

确实,它总是会返回false,因为您的Volly代码和webView代码之间没有任何关系,因此基于此answer的正确方法,您必须使用evaluateJavascript代替凌空,通过传递javaScript功能,您可以了解用户案例。

wv.evaluateJavascript("(function() { return 'this'; })();", new ValueCallback<String>() {
    @Override
    public void onReceiveValue(String s) {
        Log.d("LogName", s); // Prints: "this"

        //check for user case based on javaScriptFunction
    }
});