gpt4 book ai didi

Android- Webview onPageFinished 调用了两次

转载 作者:IT老高 更新时间:2023-10-28 22:25:39 25 4
gpt4 key购买 nike

我有一个 Activity 通过拦截重定向 url 一旦它显示在 web View 中来进行 OAuth 身份验证。但是,由于某种原因,onPageFinished 函数被调用了两次,这真的弄乱了我的应用程序。代码如下:

public class WebViewActivity extends Activity {
private WebView gWebView;
final String REDIRECT_URI = "https://localhost:5000/receive_code";
final String CLIENT_ID = "can't post it here";
final String CLIENT_SECRET = "can't post it here";
final String SCOPE = "basic names genomes analyses";
Hashtable<String, String> riskPairs;

public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.webview);

gWebView = (WebView) findViewById(R.id.webView1);

gWebView.loadUrl("https://api.23andme.com/authorize/?redirect_uri="
+ REDIRECT_URI + "&response_type=code&client_id=" + CLIENT_ID
+ "&scope=" + SCOPE);

Log.d("WEBVIEW", "got to webpage");

gWebView.setWebViewClient(new WebViewClient() {

@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
if (url.startsWith(REDIRECT_URI)) {
Log.d("WEBVIEW", "onpagefinished is called");
System.out.println("got to override");
if (url.indexOf("code=") != -1) {
//if the query contains code
String queryString = null;
try {
queryString = new URL(url).getQuery();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(queryString);
String[] params = queryString.split("&");
String code = null;
for (String param : params) {
if (param.startsWith("code=")) {
code = param.substring(param.indexOf('=') + 1);
}
}
gWebView.setVisibility(View.GONE);
new PostRequest().execute(code);
// don't go to redirectUri
}
}
}
});


}
class PostRequest extends AsyncTask<String,Void,String>{ code getting client data...}

附:请不要将此标记为重复...我在 StackOverflow 上阅读了一个类似的问题,并且调用 ShouldOverrideUrlLoading 对我不起作用(这就是我首先使用 onPageFinished() 的原因)。

最佳答案

如果onPageStarted方法启动onPageFinished后url是OK的,但是如果url之后重定向onPageStarted 开始 shouldOverrideUrlLoading 然后 onPageFinished。您应该只检查加载 URL 是否被重定向

private boolean isRedirected;

@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {

if (!isRedirected) {
//Do something you want when starts loading
}

isRedirected = false;
}

如果 URL 被重定向,回调将启动此函数

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {

view.loadUrl(url);
isRedirected = true;
return true;
}

在 onPageFinished 做某事之前检查回调是否进入了 shouldOverrideUrlLoading 方法

@Override
public void onPageFinished(WebView view, String url) {

if (!isRedirected) {
//Do something you want when finished loading
}
}

关于Android- Webview onPageFinished 调用了两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18282892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com