用webView来加载。
以获取最终的url。
以获取最终的url。
解决方案 »
- Android Map 的获取API Key的问题
- android屏幕录像原理
- ndk-build clean 操作后出现如下提示 请前辈们帮忙看看
- 百度android地图怎么获取当前屏幕中心点的坐标
- 刚从J2ME转过来 请问如何绘制图片中的一部分?
- eclipse编译cocos2d-x出的ndk错误求助
- 如何在内部类中引用父类的成员
- android loop设备设置
- 用SnapDragon Profiler的时候发现GPU渲染每帧之间都有几十毫秒的中断
- Android DownloadManager下载问题
- android studio升级后的gradle问题
- Android中嵌入式数据库有那些
如果实现dwr框架的话,应该好弄用3楼的办法也比较靠谱.不过那就要熟悉webview了
* 根据url获得页面源码, 调用web接口
* @param url 访问地址, 必备参数
* @param method 请求方式post还是get, 默认get
* @param params 参数列表 post必备, 比如:"name=张三&age=18"
* @param sessionInfo 可以保持session, 默认不保持
* @param encoding 编码格式, 默认UTF_8
* @param isLine 得到的源码是否换行, 默认false
* @return
*/
public String sound(String url, String method, String params, String sessionInfo, String encoding, boolean isLine) throws Exception {
Log.e("AbstractActivity", "调用web接口:" + url);
encoding = (isBlank(encoding) ? HTTP.UTF_8 : encoding);
method = (isBlank(method) ? Domain.REQUEST_GET : method.toUpperCase());
String mathStr = "mathRandom=" + Math.random();
if (method.equals(Domain.REQUEST_GET)) {url += (url.indexOf("?") != -1 ? "&" : "?") + mathStr;}
HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
if (!isBlank(sessionInfo)) {conn.setRequestProperty("Cookie", sessionInfo);}
conn.setRequestMethod(method);
if (requestTime > 0) {
conn.setConnectTimeout(requestTime);
conn.setReadTimeout(requestTime);
}
if (method.equals(Domain.REQUEST_POST)) {
conn.setDoOutput(true);
OutputStream output = conn.getOutputStream();
output.write((isBlank(params) ? mathStr : params + "&" + mathStr).getBytes(encoding));
output.flush();output.close();
}
String response = FileUtil.get().readFile(conn.getInputStream(), encoding, 1, isLine);
conn.disconnect();
requestTime = Domain.LONG_REQUEST_TIME;
return response;
}用webview去获取也行:
/**
* 内嵌浏览器的util
* @author TCK-001
* @version 1.0
*/
public final class BrowserUtil {
private BrowserUtil() {}
private static BrowserUtil bean = new BrowserUtil();
private WebView webView;
private String showSourceMethod;
private Map<String, Object> urlGressMsg;
private ProgressDialog gressDialog;
/**
* 单例模式获得bean
* @param webView 浏览器对象
* @param showSourceMethod 显示源码的方法,可以为null
* @param urlGressMsg 加载网页显示进度条的内容
* @return
*/
public static BrowserUtil get(WebView webView, String showSourceMethod, Map<String, Object> urlGressMsg) {
if (null == webView) {
throw new RuntimeException("加载浏览器出错");
}
bean.webView = webView;
bean.showSourceMethod = showSourceMethod;
bean.urlGressMsg = urlGressMsg;
return bean;
}
private WebViewClient client = new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String targetUrl) {
view.loadUrl(targetUrl);
return true;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
String msg = getGress(dispUrl(url));
if (!ToolUtil.get().isBlank(msg)) {
gressDialog = ProgressDialog.show(webView.getContext(), "请稍等...", msg, true);
gressDialog.setCanceledOnTouchOutside(true);
}
} @Override
public void onPageFinished(WebView view, String url) {
if (null != gressDialog) {
gressDialog.dismiss();
}
gressDialog = null;
if (!ToolUtil.get().isBlank(showSourceMethod)) {// 显示源码
view.loadUrl("javascript:window." + showSourceMethod + "('<head>'+" +
"document.getElementsByTagName('html')[0].innerHTML+'</head>');");
}
} };
private OnKeyListener keyListener = new OnKeyListener() {
public boolean onKey(View view, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
if (keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()) {
webView.goBack();
return true;
}
}
return false;
}
};
// 处理url,有问号就去掉
private String dispUrl(String url) {
return (!ToolUtil.get().isBlank(url) && url.indexOf("?") != -1 ? url.substring(0, url.indexOf("?")) : url);
}
// 根据url获得进度条提示语
private String getGress(String url) {
if (null == urlGressMsg) {return "";}
String msg = (String) urlGressMsg.get(dispUrl(url));
if (ToolUtil.get().isBlank(msg)) {
for (Entry<String, Object> entry : urlGressMsg.entrySet()) {
if (entry.getKey().indexOf(url) != -1 || url.indexOf(entry.getKey()) != -1) {
msg = (String) entry.getValue();
break;
}
}
}
return msg;
} public WebViewClient getClient() {
return client;
} public OnKeyListener getKeyListener() {
return keyListener;
}}
public class TestAct extends AbstractActivity { private WebView webview; @Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);setContentView(R.layout.test);app().addActivity(this);
int size = viewUtil.getChildHeight(800, 60);
((ImageView) findView(R.id.imgQQ)).setImageBitmap(imageUtil.reduce(resBitmap(R.drawable.qq), size, size, false));
((ImageView) findView(R.id.imgWB)).setImageBitmap(imageUtil.reduce(resBitmap(R.drawable.wb), size, size, false));
webview = findView(R.id.wbvBrowser);
Map<String, Object> gressMsg = toolUtil.createMap(new String[] { OtherUrls.QQ_LOGIN_URL, OtherUrls.SINA_LOGIN_URL, Config.TCK_URL + "/login/third.htm" },
new Object[] { "正在加载QQ界面...", "正在加载新浪微博界面...", "正在登录淘材库服务器..." });
BrowserUtil browser = BrowserUtil.get(webview, "otherLogin.showBrowserSource", gressMsg);
webview.getSettings().setJavaScriptEnabled(true);
webview.setWebViewClient(browser.getClient());
webview.setOnKeyListener(browser.getKeyListener());
webview.addJavascriptInterface(this, "otherLogin");
} public void showBrowserSource(String html) {
System.out.println(html);// 就这这里输出了网页的源码
}}