我已经在网上搜索一种方法来做到这一点大约一周了,但我似乎无法弄清楚。
我正在尝试实现一个应用程序,我的大学可以使用它来允许用户轻松登录校园内的各种服务。目前的工作方式是他们进入在线门户,选择他们想要的服务,填写他们的用户名和密码,然后单击登录。表单数据通过 post(它包括几个隐藏值以及用户名和密码)发送到相应的登录脚本,然后登录脚本将它们登录并加载服务。
我一直试图用两种方法来解决这个问题。我首先尝试了 WebView,但它似乎不想支持通常使该表单正常工作的所有 html。我获得了所需的所有元素、用户和密码字段以及登录按钮,但单击该按钮不会执行任何操作。我想知道是否需要为其添加一个 onclick 处理程序,但我不知道如何在 webview 的 html 中实现该按钮,而不使用单独的 android 元素。
另一种可能性是使用 xml 小部件以良好的相对布局创建表单,这似乎加载速度更快,并且在 Android 屏幕上看起来更好。我使用 EditText 字段进行输入,使用微调器小部件进行服务选择,使用按钮小部件进行登录。我知道如何分别为按钮和微调器制作 onclick 和项目选择处理程序,但我不知道如何通过 POST 发送该数据,然后启动浏览器。我可以使用操作 url 执行意图,但无法将 POST 数据输入其中。
这就是我现在所拥有的......
HttpParams params = new BasicHttpParams();
HttpClient client = new DefaultHttpClient(params);
HttpPost post = new HttpPost(action);
String endResult = null;
try
{
post.setEntity(new UrlEncodedFormEntity(myList));
}
catch (UnsupportedEncodingException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
try
{
String response = client.execute(post, new BasicResponseHandler());
endResult = response;
}
catch (ClientProtocolException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
所以我现在的问题是……如何获取 endResult 屏幕(它应该是我登录服务后返回的页面)并将其显示在浏览器中?
他们只使用内置浏览器有什么问题吗?您还可以使用以下方式提交表单UrlEncodeFormEntity http://developer.android.com/reference/org/apache/http/client/entity/UrlEncodedFormEntity.html和 HttpClient。
HttpParams params = new DefaultHttpParams(); // setup whatever params you what
HttpClient client = new DefaultHttpClient(params);
HttpPost post = new HttpPost("someurl");
post.setEntity(new UrlEncodedFormEntity()); // with list of key-value pairs
client.execute(post, new ResponseHandler(){}); // implement ResponseHandler to handle response correctly.
好的,当你得到字符串中的响应之后。由于它是一个页面,因此响应将采用 html 格式。您需要使用 WebView 来显示 html。 WebView 有一个方法 loadData(),它接受一个 html 字符串并显示它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)