我需要从WebView收集浏览器cookie并将它们返回给另一个Activity。收集cookie已经可以使用但是在扩展WebViewClient
的类中发生,我不知道如何从那里返回数据。
有2项活动; MainActivity和LoginActivity分别。 MainActivity有一个按钮,用于创建Intent并启动LoginActivity,它具有单个WebView。 OnCreate()
,WebView将定向到网站的登录页面。当用户成功登录此站点时,它会将数据存储在浏览器cookie中 - 稍后我需要API调用的数据。如何将此数据返回给MainActivity?
WebView有一个带有重写OnPageFinished()
方法的自定义WebViewClient,如果URL是预期的,将收集浏览器cookie,如下所示。
class TempWebViewClient extends WebViewClient {
@Override
public void onPageFinished(WebView view, String url) {
// If page URL is the Home page (ie., you logged in successfully), collect cookies.
if (url.equals("https://slate.sheridancollege.ca/d2l/m/home")) {
String cookies = CookieManager.getInstance().getCookie(url);
String[] cookies2 = cookies.split(";");
String key1 = "";
String key2 = "";
// Find Keys placed in browser cookies.
for (String c : cookies2) {
String[] c2 = c.split("=");
if (c2[0].equals(" phrase1")) {
key1 = c2[1];
}
if (c2[0].equals(" phrase2")) {
key = c2[1];
}
}
}
}
}
在我收到Cookie中的密钥之前,LoginActivity不应调用finish()
(返回MainActivity)。鉴于我已经拥有的,我怎样才能实现这一目标?我不知道LoginActivity如何阻止返回MainActivity,直到它拥有来自其WebView的数据。
public class LoginActivty extends Activity {
WebView webview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
setupViews();
setContentView(webview);
}
public void setupViews() {
StrictMode.ThreadPolicy policy = new
StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
CookieManager.getInstance().setAcceptCookie(true);
webview = new WebView(this);
webview.setWebViewClient(new TempWebViewClient());
webview.getSettings().setJavaScriptEnabled(true);
webview.loadUrl("website");
}
}
答案 0 :(得分:0)
在TempWebclient中创建登录活动的引用,以便在获取cookie后传递结果。
class TempWebViewClient extends WebViewClient {
LoginActivty mDelegate;
public TempWebViewClient(LoginActivty ref) {
this.mDelegate = ref;
}
@Override
public void onPageFinished(WebView view, String url) {
// perform task
String cookie;// get from CookieManager
mDelegate.sendCookieAndFinish(cookie);
}
}
在登录活动中创建功能
public class LoginActivty extends Activity {
WebView webview;
@Override
protected void onCreate(Bundle savedInstanceState) {
....
}
public void setupViews() {
....
// send activity reference to webclient
webview.setWebViewClient(new TempWebViewClient(this));
}
public void sendCookieAndFinish(String cookie){
setResult(ResultCode,ResultIntent); // set result for your main activity
// store cookie to storage
finish();
}
}
从主要活动启动您的LoginActivity以获得结果