【问题标题】:Android Studio: Webview and Sessions BasicsAndroid Studio:Webview 和会话基础
【发布时间】:2017-06-07 20:57:36
【问题描述】:

我有一个运行良好的 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,因此不知道用户是否登录。

我已经在网上寻找解决方案,但没有解决问题。任何帮助将不胜感激。

如果您需要任何其他信息,请随时询问。

【问题讨论】:

    标签: android webview


    【解决方案1】:

    确实总是返回false,因为你的Volly代码和你的webView代码之间没有关系,所以基于这个answer的正确方法,你必须使用evaluateJavascript而不是volley ,通过传递您的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
        }
    });
    

    【讨论】:

    • 好的,所以只需要在 android 上使用与 iOS 不同的方法。感谢您的迅速反应。
    • 我不知道是否有更简单的方法,但代码将无法在 webView 和volley 代码之间建立关系。
    • 没关系,我会去掉凌空部分。因此,当他们登录时,我将只在该页面上的 javascript 中有一些变量,并使用 wv.evaluateJavascript 将它们传递回本机应用程序,如所述。甚至可能是 iOS 版本的更清洁的解决方案。我希望我所说的有道理,并且意味着我已经理解您的回应。
    • 这正是我的意思,祝你好运。
    • 好消息,我很高兴我明白了。去我大声笑。照顾易卜拉欣。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    • 1970-01-01
    相关资源
    最近更新 更多