一、WebView

这个View就是一个浏览器,用于展示网页的。

布局文件:

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:layout_width="match_parent"
  3. android:layout_height="match_parent"
  4. android:orientation="vertical">
  5.  
  6. <WebView
  7. android:id="@+id/web_view"
  8. android:layout_width="match_parent"
  9. android:layout_height="match_parent">
  10. </WebView>
  11.  
  12. </LinearLayout>

java代码:

  1. public class MainActivity extends AppCompatActivity{
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. setContentView(R.layout.activity_main);
  6.  
  7. WebView webView = (WebView) findViewById(R.id.web_view);
  8. webView.getSettings().setJavaScriptEnabled(true);
  9. webView.setWebViewClient(new WebViewClient());
  10. webView.loadUrl("http://www.baidu.com");
  11. }
  12. }

webView.getSettings().setJavaScriptEnabled(true)这个方法传入true,让WebView支持JavaScript脚本

webView.setWebViewClient(new WebViewClient()),实现了当需要从一个网页跳到另一个网页的时候,希望也在这个WebView中显示

AndroidManifest文件权限添加:

  1. <uses-permission android:name="android.permission.INTERNET"/>

效果:

二、HTTP协议访问数据

  工作原理:客户端向服务器发出一条HTTP请求,服务器收到请求后会返回一些数据给客户端,然后客户端再对数据进行解析和处理。

  1、使用HttpURLConnection

    基本用法:

      * 首先获取到HttpURLConnection的实例

  1.   URL url = new URL("https://www.baidu.com");
  2.   HttpURLConnection connection = (HttpURLConnection) url.openConnection();

      *设置HTTP请求是希望从服务器获取数据(GET),还是希望提交数服务器(POST) 

  1.   connection.setRequestMethod("GET");

      *设置连接超时的时间,读取超时的时间:

  1.   connection.setConnectTimeout(8000);
  2.   connection.setReadTimeout(8000);

      *调用getInputStream()方法获取到服务器的输入流:

  1.   InputStream in = connection.getInputStream();

      *最后调用disconnect()把这个HTTP连接关掉:

  1.   connection.disconnect();

实例应用程序:

  布局代码:

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:layout_width="match_parent"
  3. android:layout_height="match_parent"
  4. android:orientation="vertical">
  5.  
  6. <Button
  7. android:id="@+id/send_request"
  8. android:layout_width="match_parent"
  9. android:layout_height="wrap_content"
  10. android:text="发送" />
  11.  
  12. <ScrollView
  13. android:layout_width="match_parent"
  14. android:layout_height="match_parent">
  15.  
  16. <TextView
  17. android:id="@+id/response_text"
  18. android:layout_width="match_parent"
  19. android:layout_height="wrap_content" />
  20. </ScrollView>
  21.  
  22. </LinearLayout>

  java代码:

  1. public class MainActivity extends AppCompatActivity{
  2.  
  3. TextView responseText;//用于展示从服务器获取到的文本的控件
  4. @Override
  5. protected void onCreate(Bundle savedInstanceState) {
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.activity_main);
  8.  
  9. //控件注册
  10. final Button sendRequest = (Button) findViewById(R.id.send_request);
  11. responseText = (TextView) findViewById(R.id.response_text);
  12.  
  13. //按钮相应
  14. sendRequest.setOnClickListener(new View.OnClickListener() {
  15. @Override
  16. public void onClick(View view) {
  17. sendRequestWithHttpURLConnection();
  18. }
  19. });
  20. }
  21.  
  22. private void sendRequestWithHttpURLConnection(){
  23.  
  24. //开启线程来发起网络请求
  25. new Thread(new Runnable() {
  26. @Override
  27. public void run() {
  28. HttpURLConnection connection = null;
  29. BufferedReader reader = null;
  30. try{
  31. URL url = new URL("https://www.baidu.com");
  32. connection = (HttpURLConnection) url.openConnection();
  33. connection.setRequestMethod("GET");
  34. connection.setConnectTimeout(8000);
  35. connection.setReadTimeout(8000);
  36. InputStream in = connection.getInputStream();
  37.  
  38. //对获取到的输入流进行读取
  39. reader = new BufferedReader(new InputStreamReader(in));
  40. StringBuilder response = new StringBuilder();
  41. String line;
  42. while ((line = reader.readLine()) != null){
  43. response.append(line);
  44. }
  45. showResponse(response.toString());
  46. }catch (Exception e){
  47. e.printStackTrace();
  48. }finally {
  49. if(reader != null){
  50. try{
  51. reader.close();
  52. }catch (IOException e){
  53. e.printStackTrace();
  54. }
  55. }
  56. if(connection != null){
  57. connection.disconnect();
  58. }
  59. }
  60. }
  61. }).start();
  62. }
  63.  
  64. private void showResponse(final String response){
  65. runOnUiThread(new Runnable() {
  66. @Override
  67. public void run() {
  68. //UI操作
  69. responseText.setText(response);
  70. }
  71. });
  72. }
  73. }

效果:

  2、使用OkHttp

    这是一个用来代替HttpURLConnection的开源库

    基本用法:

      *添加OkHttp库的依赖

  1. compile 'com.squareup.okhttp3:okhttp:3.9.0'

      *创建一个OkHttpClient的实例

  1. OkHttpClient client = new OkHttpClient();

      *创建一个Request实例,并连缀其他方法丰富这个对象

  1. Request request = new Request.Builder()
  2.   .url("http://www.baidu.com")
  3.   .build();

      *获取返回的数据

  1.   Response response = client.newCall(request).execute();

修改上面的程序:

  1. public class MainActivity extends AppCompatActivity{
  2.  
  3. TextView responseText;//用于展示从服务器获取到的文本的控件
  4. @Override
  5. protected void onCreate(Bundle savedInstanceState) {
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.activity_main);
  8.  
  9. //控件注册
  10. final Button sendRequest = (Button) findViewById(R.id.send_request);
  11. responseText = (TextView) findViewById(R.id.response_text);
  12.  
  13. //按钮相应
  14. sendRequest.setOnClickListener(new View.OnClickListener() {
  15. @Override
  16. public void onClick(View view) {
  17. sendRequestWithHttpURLConnection();
  18. }
  19. });
  20. }
  21.  
  22. private void sendRequestWithHttpURLConnection(){
  23.  
  24. //开启线程来发起网络请求
  25. new Thread(new Runnable() {
  26. @Override
  27. public void run() {
  28. try{
  29. OkHttpClient client = new OkHttpClient();
  30. Request request = new Request.Builder()
  31. .url("http://www.baidu.com")
  32. .build();
  33. Response response = client.newCall(request).execute();
  34. String responseData = response.body().string();
  35. showResponse(responseData);
  36. }catch (Exception e){
  37. e.printStackTrace();
  38. }
  39. }
  40. }).start();
  41. }
  42.  
  43. private void showResponse(final String response){
  44. runOnUiThread(new Runnable() {
  45. @Override
  46. public void run() {
  47. //UI操作
  48. responseText.setText(response);
  49. }
  50. });
  51. }
  52. }

效果同样。。

android ——网络编程的更多相关文章

  1. Android网络编程只局域网传输文件

    Android网络编程之局域网传输文件: 首先创建一个socket管理类,该类是传输文件的核心类,主要用来发送文件和接收文件 具体代码如下: package com.jiao.filesend; im ...

  2. Android网络编程基础

    Android网络编程只TCP通信 TCP 服务器端工作的主要步骤如下.步骤1 调用ServerSocket(int port)创建一个ServerSocket,并绑定到指定端口上.步骤2 调用acc ...

  3. Android网络编程系列 一 TCP/IP协议族

    在学习和使用Android网路编程时,我们接触的仅仅是上层协议和接口如Apache的httpclient或者Android自带的httpURlconnection等等.对于这些接口的底层实现我们也有必 ...

  4. Android网络编程系列 一 Socket抽象层

     在<Android网络编程>系列文章中,前面已经将Java的通信底层大致的描述了,在我们了解了TCP/IP通信族架构及其原理,接下来我们就开始来了解基于tcp/ip协议层的Socket抽 ...

  5. Android 网络编程 Socket

    1.服务端开发 创建一个Java程序 public class MyServer { // 定义保存所有的Socket,与客户端建立连接得到一个Socket public static List< ...

  6. Android网络编程概述

    Android网络编程概述 首先,应该了解的几个问题: 1)Android平台网络相关API接口 a) java.net.*(标准Java接口) java.net.*提供与联网有关的类,包括流.数据包 ...

  7. Android网络编程http派/申请服务

    最近的研究Android网络编程知识,这里有一些想法,今晚学习.与您分享. 在实际的应用程序的开发非常需要时间appserver请求数据,那么app怎样发送请求呢?以下的代码就是当中的一种情况.使用H ...

  8. 转 Android网络编程之使用HttpClient批量上传文件 MultipartEntityBuilder

    请尊重他人的劳动成果,转载请注明出处:Android网络编程之使用HttpClient批量上传文件 http://www.tuicool.com/articles/Y7reYb 我曾在<Andr ...

  9. Android网络编程要学的东西与Http协议学习

    本节引言: 本节开始我们来学习Android网络编程相关的一些东西:Android端网络编程是要干嘛?http协议的学习,使用自带扣脚Json解析类解析Json,XML解析常用的几种方式,HttpUr ...

  10. 【Android 应用开发】Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介

    Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...

随机推荐

  1. 嵊州D1T4 cf1174E 占梦人

    嵊州D1T4 cf1174E 此题为改编题,原题:cf1174E 占梦人 占梦人一个晚上会做 n 个梦,编号为 1 ∼ n,她可以安排做这 n 个梦的顺序. 假如她第一个做了编号为 x 的梦,那么她的 ...

  2. Android使用WebView加载H5页面播放视频音频,退出后还在播放问题解决

    Android中经常会使用到WebView来加载H5的页面,如果H5页面中有音频或者视频的播放时,还没播放完就退出界面,这个时候会发现音频或者视频还在后台播放,这就有点一脸懵逼了,下面是解决方案: 方 ...

  3. 淺談Coach思考模式

    我現在是個窮屌,沒錯.我清楚的知道這一點,但是我也知道,我能改變. 之前幹了7年的評估行業,中間換了3家公司,第一家公司待的時間最長,待了5年.2018年開始,我就在思考轉行.之前在第一家企業接觸過一 ...

  4. centos 5.2 php升级

    # gedit /etc/yum.repos.d/utterramblings.repo [utterramblings] name=Jason's Utter Ramblings Repo base ...

  5. [记录]FIO测试磁盘iops性能

    FIO测试磁盘iops性能 1.SATA和SAS盘原生IOPS如下: 2.RAID磁盘阵列对应的写惩罚级别: 3.计算功能性IOPS公式如下: 功能性 IOPS=(((总原生 IOPS×写 %))/( ...

  6. vue-cli安装搭建初始项目

    vue-cli脚手架 前提:node + npm 安装好 一.介绍 vue-cli: Vue + ESLint + webpack + iview + ES6 Vue:主要框架ESLint:帮助我们检 ...

  7. Spring MVC + Spring + MyBatis 框架整合

    本文介绍使用SSM框架开发web项目Demo. 一.创建一个web-Poject项目 1.导入相关jar文件至lib下.“相关jar文件” --提取密码 oraw 2.修改web.xml文件 < ...

  8. 人事管理系统为你解剖JSP

    人事管理系统为你解剖JSP 前言: 之前写过两篇学习JSP的博客,<Java匹马行天下之JavaWeb核心技术——JSP>https://www.cnblogs.com/zyx110/p/ ...

  9. [leetcode] 51. N-Queens (递归)

    递归,经典的八皇后问题. 利用一位数组存储棋盘状态,索引表示行,值为-1表示空,否则表示列数. 对行进行搜索,对每一行的不同列数进行判断,如果可以摆放符合规则,则摆放,同时遍历下一行. 遍历过程中,若 ...

  10. vijos P1848 记数问题

    自答[119ms内存456.0 KiB] #include<iostream>using namespace std;int num = 0;void judge(int n, int x ...