HTTP数据传输和WebView的使用

关于android的Web的一些小知识:
1)HTTP数据通讯--GET和POST的使用
2)WebView--迅速的创建一个Web浏览器,虽然不是轻量级的,但是很容易的可以创建一个浏览器,也不失为一个学习的内容。
-------------------------------------------------------------------------------------------------

GET的使用:
// Android 调用 http 协议的 get 方法
// 本例:以 http 协议的 get 方法获取远程页面响应的内容
private void httpGetDemo(){
try {
// 模拟器测试时,请使用外网地址--这里使用了内网的地址
URL url = new URL("http://192.168.137.57/test.txt");
//建立一个连接
URLConnection con = url.openConnection();

String result = "http status code: " + ((HttpURLConnection)con).getResponseCode() + "\n";
// HttpURLConnection.HTTP_OK---连接成功
if (HttpURLConnection.HTTP_OK != ((HttpURLConnection)con).getResponseCode())
{
Log.i("Main", "connection failed");
return;
}

//连接到一个连接服务端的输出流
InputStream is = con.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
ByteArrayBuffer bab = new ByteArrayBuffer(32);
int current = 0;
while ( (current = bis.read()) != -1 ){
bab.append((byte)current);
}
//EncodingUtils----apache的一个方法---
//The home for utility methods that handle various encoding tasks.
result += EncodingUtils.getString(bab.toByteArray(), HTTP.UTF_8);

bis.close();
is.close();

//把得到的Response数据+txt文件流的数据设置到textView中

textView.setText(result);
} catch (Exception e) {
textView.setText(e.toString());
}
}

POST的使用:

// Android 调用 http 协议的 post 方法
// 本例:以 http 协议的 post 方法向远程页面传递参数,并获取其响应的内容
private void httpPostDemo(){
try {
// 模拟器测试时,请使用外网地址
String url = "http://192.168.137.57/test.txt";

//定义个map存储键值对
Map<String, String> data = new HashMap<String, String>();
data.put("name", "webabcd");
data.put("salary", "100");

//new 一个客户端
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
//把键值对数据放入list中
ArrayList<BasicNameValuePair> postData = new ArrayList<BasicNameValuePair>();
for (Map.Entry<String, String> m : data.entrySet()) {
postData.add(new BasicNameValuePair(m.getKey(), m.getValue()));
}
//
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(postData, HTTP.UTF_8);
httpPost.setEntity(entity);

HttpResponse response = httpClient.execute(httpPost);

String result = "http status code: " + response.getStatusLine().getStatusCode() + "\n";
// HttpURLConnection.HTTP_OK
if (HttpURLConnection.HTTP_OK != response.getStatusLine().getStatusCode())
{
Log.i("Main", "connection failed");
return;
}
HttpEntity httpEntity = response.getEntity();

InputStream is = httpEntity.getContent();
result += convertStreamToString(is);

textView.setText(result);
} catch (Exception e) {
textView.setText(e.toString());
}
}

------------------------------------------------------------------------------------------------
下面介绍WebView的一个重要的方法

webview.loadUrl()
a) 加载某个网页
b) 调用网页里的某个JS方法
--------------------------------------------------------------------------------------------------

我们要实现的功能很简单,通过WebView加载一个本地的html网页

实现网页和活动交互。

1.活动到网页的交互

mWebView = (WebView) findViewById(R.id.wv);

mWebView.loadUrl(LOCAL_URL);
btn.setOnClickListener(new OnClickListener()
{
public void onClick(View arg0)
{

//得到输入框中的内容
String inputStr = txt.getText().toString();

//通过.loadUrl("js命令")实现数据的传输,可以通过一个div标签显示输入框中的内容
mWebView.loadUrl("javascript:get4Android('" + inputStr + "')");
}
});

webview一些属性需要设置:

//得到WebSetting对象对WebView进行设置

WebSettings webSettings = mWebView.getSettings();

// 设置支持js
webSettings.setJavaScriptEnabled(true);

//给webview设置一个client使当前webview作为一个独立的浏览器使用,需要定义一个实现WebViewClient的类MyWebViewClient。

mWebView.setWebViewClient(new MyWebViewClient());

// 使页面获得焦点
mWebView.requestFocus();

2.网页到活动的交互

a)活动绑定js的方法:--两者通过theKey来作为接口

mWebView.addJavascriptInterface(new runJavaScript(), "theKey");

b)自己定义的一个内部类----js异步的通过h(handler对象)来刷新活动中的数据

private final class runJavaScript
{
public void runOnAndroidJavaScript(final String str)
{
h.post(new Runnable()
{
// @Override
public void run()
{
TextView show = (TextView) findViewById(R.id.show);
show.setText("This is a message from javascript:" + str);
}
});
}
}

c)JS通过theKey来传递数据

window.theKey.runOnAndroidJavaScript(str);

--------------------------------------------------------------------------------------------------

总结如下:

WebView与JS
接口:
a) 本地组件向网页传递数据
1. URL
2. JS方法名 + 参数


b) 网页向本地组件传递数据
1. interfaceName The name to used to expose the class in Javascript
2. java代码中interfaceName对应的方法名和参数

这里只是写了一些课堂的笔记,如果大家想深入的了解代码可以给我留言。打完收工,可以睡觉了。。。。。。。。。

更多相关文章

  1. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. 一句话锁定MySQL数据占用元凶
  3. 【Android(安卓)Developers Training】 23. 序言:保存数据
  4. Android获取控件的大小
  5. Android(安卓)隐藏软键盘的方式
  6. 设置android软键盘,默认不弹出的方法
  7. Android(安卓)的回调事件详解
  8. Android(安卓)HAL 开发 (4)
  9. android manager 更新 android的有效方法【更新到 2015-1-18】

随机推荐

  1. 龙归科技 | 对未来的若干猜测
  2. 1.docker介绍安装,镜像管理,通过容器、模板
  3. 从零单排学Redis【铂金二】
  4. 华为帐号服务升级,助力应用快速验证用户身
  5. 100道Java并发和多线程基础面试题大集合(
  6. Real World CTF 2020 DBaaSadge Writeup
  7. 外行人都能看得懂的机器学习,错过了血亏!
  8. 周末推荐阅读【第二弹】
  9. 从零单排学Redis【白银】
  10. GraphObject继承的类包括:Shape、TextBlo