你好Stackoverflowers!
我编写了一个相对简单的应用程序,它包含登录文本字段,密码文本字段和登录按钮。
我的目标是当用户输入登录信息并触摸登录按钮时,应用程序会将用户登录到我指定的网站,并以不同的意图或WebView将其打开。我当前的实现使用WebView打开一个新活动并传入登录信息。新活动的代码如下:
setContentView(R.layout.web);
try {
//add the users login information(username/pw) to a List
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("email", "random@gmail.com"));
nameValuePairs.add(new BasicNameValuePair("password", "password1"));
//declare a new HttpClient
HttpClient httpclient = new DefaultHttpClient();
//set the HttpPost to the desire URL
HttpPost httppost = new HttpPost(URL_STRING);
//set the entity to a new UrlEncodedForm with the login info and type
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8));
//store the response
HttpResponse response = httpclient.execute(httppost);
//get the data from the response
String data = new BasicResponseHandler().handleResponse(response);
//get the webview from the xml
WebView webview = (WebView)findViewById(R.id.webView);
webview.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
view.loadUrl(url);
return true;
}
});
//load the return website from the server
webview.loadDataWithBaseURL(httppost.getURI().toString(), data, "text/html", HTTP.UTF_8, null);
这会成功登录到URL(https站点)并打开页面,但是如果您尝试单击网站上的任何按钮,它会将您带回WebView中的登录页面,它会不显示网站上的许多属性(图表/图表)。
这可能是饼干吗?
那么有没有办法通过新意图发送登录信息?或者我的WebView实现有解决方案吗?
(这是一个相对类似的(ish)问题,从未得到明确的答案Android SSO (Single sign-on) for app)
感谢您的时间!我真的很感谢你看看我的问题。
编辑:所以giseks的解决方案让我能够让网页保持在WebView中,但是页面上的图表/图表/等仍然没有显示,解决方案就是这么简单为WebSettings启用javascript
webview.getSettings().setJavaScriptEnabled(true);
以下是Google的WebSettings Android API供参考:WebSettings
这对我有所帮助,我希望它可以帮助你!
答案 0 :(得分:3)
我的猜测是您的应用程序无法正确处理Cookie。看看这个问题,它可能有所帮助。
WebView and Cookies on Android
修改强>
在您的代码中,您似乎只将从请求中检索到的html传递给WebView。饼干似乎在某个地方迷失了。我建议你采用另一种方法。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView webv = (WebView)findViewById(R.id.MainActivity_webview);
webv.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
String postData = FIELD_NAME_LOGIN + "=" + LOGIN +
"&" + FIELD_NAME_PASSWD + "=" + PASSWD;
// this line logs you in and you stay logged in
// I suppose it works this way because in this case WebView handles cookies itself
webv.postUrl(URL, EncodingUtils.getBytes(postData, "utf-8"));
}