Tôi có một hoạt động xác thực OAuth bằng cách chặn url chuyển hướng khi url đó hiển thị trong chế độ xem web. Tuy nhiên, hàm onPageFinished bằng cách nào đó được gọi là hai lần vì một lý do nào đó, điều này thực sự làm rối loạn ứng dụng của tôi. Đây là mã:Android- Webview trênPageFinished Called Twice
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...}
P.S. Xin vui lòng không đánh dấu điều này như là một bản sao ... Tôi đã đọc một câu hỏi tương tự trên StackOverflow và gọi ShouldOverrideUrlLoading không làm việc cho tôi (đó là lý do tại sao tôi sử dụng onPageFinished() ở nơi đầu tiên).
đây không phải là trường hợp của tôi –
Điều này không hoạt động chút nào –