Andorid入门--HTTP数据传输和WebView的使用

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对应的方法名和参数
 

 

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

 

你可能感兴趣的:(android,http,移动开发,webView,休闲)