android - 从 WebView 加载 Activity - 第一次安装应用程序但之后就不行了?

标签 android android-activity android-webview

在我的 Android 应用程序的登录屏幕 (LoginActivity) 中,有一个“注册”按钮,可将用户带到 WebView 中显示的注册网页(在 SignupActivity 中)。用户注册后(即单击“CreateAccount”按钮),我想将他们带回 LoginActivity。

我当前的代码如下。它在第一次安装应用程序时有效,但在第二次重复该过程后,if/else 子句根本不会触发(既没有显示日志也没有发生重定向)。为什么?

public class SignupActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.d("SignupActivity", "Signup Activity started");

    WebView webView = new WebView(this);
    setContentView(webView);

    webView.setWebViewClient(new MyWebViewClient());
    webView.loadUrl("https://commons.m.wikimedia.org/w/index.php?title=Special:CreateAccount&returnto=Main+Page&returntoquery=welcome%3Dyes");

}

private class MyWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url.equals("https://commons.m.wikimedia.org/w/index.php?title=Main_Page&welcome=yes")) {
            // Signup success, so load LoginActivity again
            Log.d("SignupActivity", "Overriding URL");

            CookieSyncManager.createInstance(getApplicationContext());
            CookieManager cookieManager = CookieManager.getInstance();
            cookieManager.removeAllCookie();
            cookieManager.setAcceptCookie(false);
            cookieManager.removeSessionCookie();

            Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
            startActivity(intent);
            return true;
        } else {
            Log.d("SignupActivity", "Not overriding URL, URL is: " + Uri.parse(url).getHost());
            return false;
        }

    }

}

在 LoginActivity 中,我将此方法附加到按钮点击:

//Called when Sign Up button is clicked
    public void signUp(View view) {
        Intent intent = new Intent(this, SignupActivity.class);
        startActivity(intent);
    }

但是我是 WebView 的新手,所以我很乐意在必要时更改此设置。

最佳答案

你应该简单地覆盖 shouldOverrideUrlLoading WebViewClient 中的方法。然后当用户注册时,它应该被重定向到一个成功页面。所以你知道成功的 url 是 https://www.example.com/success。在您的 shouldOverrideUrlLoading 中检查要加载的 url 是否为成功 URL。如果是,那么就完成这个 Activity ,然后做任何你想做的事。

编辑:

private class MyWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        Log.d("SignupActivity", "Loading URL: " + url);
        if (url.equals("https://commons.m.wikimedia.org/w/index.php?title=Main_Page&welcome=yes")) {
            // Signup success, so load LoginActivity again
            Log.d("SignupActivity", "Overriding URL");
            Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
            startActivity(intent);
            return true;
        } else {
            Log.d("SignupActivity", "Not overriding URL, URL is: " + Uri.parse(url).getHost());
            return false;
        }

    }
}

关于android - 从 WebView 加载 Activity - 第一次安装应用程序但之后就不行了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38781890/

相关文章:

java - onActivityResult 的行为不符合预期

android - NativeScript:显示 ActivityIndi​​cator 时禁用所有控件

java - 通过 Android-Studio 和 'New' Google Play Services SDK 实现 Google 广告

android - FLAG_ACTIVITY_CLEAR_TOP 在通知部分不起作用

android - 如何判断 android Activity 是否已通过外部 adb 命令完成?

java - 需要在 WebView 初始页面加载时显示进度对话框

android - WebView 握手失败

c# - Xamarin Android : How do i pass variables to a buttons event method in ExpandableListView?

android - 将某些风格从 Firebase CrashReport 迁移到 Firebase Crashlytics 时遇到问题

java - Android Webview 不加载 url