android ——网络编程
一、WebView
这个View就是一个浏览器,用于展示网页的。
布局文件:
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
- <WebView
- android:id="@+id/web_view"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- </WebView>
- </LinearLayout>
java代码:
- public class MainActivity extends AppCompatActivity{
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- WebView webView = (WebView) findViewById(R.id.web_view);
- webView.getSettings().setJavaScriptEnabled(true);
- webView.setWebViewClient(new WebViewClient());
- webView.loadUrl("http://www.baidu.com");
- }
- }
webView.getSettings().setJavaScriptEnabled(true)这个方法传入true,让WebView支持JavaScript脚本
webView.setWebViewClient(new WebViewClient()),实现了当需要从一个网页跳到另一个网页的时候,希望也在这个WebView中显示
AndroidManifest文件权限添加:
- <uses-permission android:name="android.permission.INTERNET"/>
效果:
二、HTTP协议访问数据
工作原理:客户端向服务器发出一条HTTP请求,服务器收到请求后会返回一些数据给客户端,然后客户端再对数据进行解析和处理。
1、使用HttpURLConnection
基本用法:
* 首先获取到HttpURLConnection的实例
- URL url = new URL("https://www.baidu.com");
- HttpURLConnection connection = (HttpURLConnection) url.openConnection();
*设置HTTP请求是希望从服务器获取数据(GET),还是希望提交数服务器(POST)
- connection.setRequestMethod("GET");
*设置连接超时的时间,读取超时的时间:
- connection.setConnectTimeout(8000);
- connection.setReadTimeout(8000);
*调用getInputStream()方法获取到服务器的输入流:
- InputStream in = connection.getInputStream();
*最后调用disconnect()把这个HTTP连接关掉:
- connection.disconnect();
实例应用程序:
布局代码:
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
- <Button
- android:id="@+id/send_request"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="发送" />
- <ScrollView
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- <TextView
- android:id="@+id/response_text"
- android:layout_width="match_parent"
- android:layout_height="wrap_content" />
- </ScrollView>
- </LinearLayout>
java代码:
- public class MainActivity extends AppCompatActivity{
- TextView responseText;//用于展示从服务器获取到的文本的控件
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- //控件注册
- final Button sendRequest = (Button) findViewById(R.id.send_request);
- responseText = (TextView) findViewById(R.id.response_text);
- //按钮相应
- sendRequest.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- sendRequestWithHttpURLConnection();
- }
- });
- }
- private void sendRequestWithHttpURLConnection(){
- //开启线程来发起网络请求
- new Thread(new Runnable() {
- @Override
- public void run() {
- HttpURLConnection connection = null;
- BufferedReader reader = null;
- try{
- URL url = new URL("https://www.baidu.com");
- connection = (HttpURLConnection) url.openConnection();
- connection.setRequestMethod("GET");
- connection.setConnectTimeout(8000);
- connection.setReadTimeout(8000);
- InputStream in = connection.getInputStream();
- //对获取到的输入流进行读取
- reader = new BufferedReader(new InputStreamReader(in));
- StringBuilder response = new StringBuilder();
- String line;
- while ((line = reader.readLine()) != null){
- response.append(line);
- }
- showResponse(response.toString());
- }catch (Exception e){
- e.printStackTrace();
- }finally {
- if(reader != null){
- try{
- reader.close();
- }catch (IOException e){
- e.printStackTrace();
- }
- }
- if(connection != null){
- connection.disconnect();
- }
- }
- }
- }).start();
- }
- private void showResponse(final String response){
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- //UI操作
- responseText.setText(response);
- }
- });
- }
- }
效果:
2、使用OkHttp
这是一个用来代替HttpURLConnection的开源库
基本用法:
*添加OkHttp库的依赖
- compile 'com.squareup.okhttp3:okhttp:3.9.0'
*创建一个OkHttpClient的实例
- OkHttpClient client = new OkHttpClient();
*创建一个Request实例,并连缀其他方法丰富这个对象
- Request request = new Request.Builder()
- .url("http://www.baidu.com")
- .build();
*获取返回的数据
- Response response = client.newCall(request).execute();
修改上面的程序:
- public class MainActivity extends AppCompatActivity{
- TextView responseText;//用于展示从服务器获取到的文本的控件
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- //控件注册
- final Button sendRequest = (Button) findViewById(R.id.send_request);
- responseText = (TextView) findViewById(R.id.response_text);
- //按钮相应
- sendRequest.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- sendRequestWithHttpURLConnection();
- }
- });
- }
- private void sendRequestWithHttpURLConnection(){
- //开启线程来发起网络请求
- new Thread(new Runnable() {
- @Override
- public void run() {
- try{
- OkHttpClient client = new OkHttpClient();
- Request request = new Request.Builder()
- .url("http://www.baidu.com")
- .build();
- Response response = client.newCall(request).execute();
- String responseData = response.body().string();
- showResponse(responseData);
- }catch (Exception e){
- e.printStackTrace();
- }
- }
- }).start();
- }
- private void showResponse(final String response){
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- //UI操作
- responseText.setText(response);
- }
- });
- }
- }
效果同样。。
android ——网络编程的更多相关文章
- Android网络编程只局域网传输文件
Android网络编程之局域网传输文件: 首先创建一个socket管理类,该类是传输文件的核心类,主要用来发送文件和接收文件 具体代码如下: package com.jiao.filesend; im ...
- Android网络编程基础
Android网络编程只TCP通信 TCP 服务器端工作的主要步骤如下.步骤1 调用ServerSocket(int port)创建一个ServerSocket,并绑定到指定端口上.步骤2 调用acc ...
- Android网络编程系列 一 TCP/IP协议族
在学习和使用Android网路编程时,我们接触的仅仅是上层协议和接口如Apache的httpclient或者Android自带的httpURlconnection等等.对于这些接口的底层实现我们也有必 ...
- Android网络编程系列 一 Socket抽象层
在<Android网络编程>系列文章中,前面已经将Java的通信底层大致的描述了,在我们了解了TCP/IP通信族架构及其原理,接下来我们就开始来了解基于tcp/ip协议层的Socket抽 ...
- Android 网络编程 Socket
1.服务端开发 创建一个Java程序 public class MyServer { // 定义保存所有的Socket,与客户端建立连接得到一个Socket public static List< ...
- Android网络编程概述
Android网络编程概述 首先,应该了解的几个问题: 1)Android平台网络相关API接口 a) java.net.*(标准Java接口) java.net.*提供与联网有关的类,包括流.数据包 ...
- Android网络编程http派/申请服务
最近的研究Android网络编程知识,这里有一些想法,今晚学习.与您分享. 在实际的应用程序的开发非常需要时间appserver请求数据,那么app怎样发送请求呢?以下的代码就是当中的一种情况.使用H ...
- 转 Android网络编程之使用HttpClient批量上传文件 MultipartEntityBuilder
请尊重他人的劳动成果,转载请注明出处:Android网络编程之使用HttpClient批量上传文件 http://www.tuicool.com/articles/Y7reYb 我曾在<Andr ...
- Android网络编程要学的东西与Http协议学习
本节引言: 本节开始我们来学习Android网络编程相关的一些东西:Android端网络编程是要干嘛?http协议的学习,使用自带扣脚Json解析类解析Json,XML解析常用的几种方式,HttpUr ...
- 【Android 应用开发】Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介
Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...
随机推荐
- 嵊州D1T4 cf1174E 占梦人
嵊州D1T4 cf1174E 此题为改编题,原题:cf1174E 占梦人 占梦人一个晚上会做 n 个梦,编号为 1 ∼ n,她可以安排做这 n 个梦的顺序. 假如她第一个做了编号为 x 的梦,那么她的 ...
- Android使用WebView加载H5页面播放视频音频,退出后还在播放问题解决
Android中经常会使用到WebView来加载H5的页面,如果H5页面中有音频或者视频的播放时,还没播放完就退出界面,这个时候会发现音频或者视频还在后台播放,这就有点一脸懵逼了,下面是解决方案: 方 ...
- 淺談Coach思考模式
我現在是個窮屌,沒錯.我清楚的知道這一點,但是我也知道,我能改變. 之前幹了7年的評估行業,中間換了3家公司,第一家公司待的時間最長,待了5年.2018年開始,我就在思考轉行.之前在第一家企業接觸過一 ...
- centos 5.2 php升级
# gedit /etc/yum.repos.d/utterramblings.repo [utterramblings] name=Jason's Utter Ramblings Repo base ...
- [记录]FIO测试磁盘iops性能
FIO测试磁盘iops性能 1.SATA和SAS盘原生IOPS如下: 2.RAID磁盘阵列对应的写惩罚级别: 3.计算功能性IOPS公式如下: 功能性 IOPS=(((总原生 IOPS×写 %))/( ...
- vue-cli安装搭建初始项目
vue-cli脚手架 前提:node + npm 安装好 一.介绍 vue-cli: Vue + ESLint + webpack + iview + ES6 Vue:主要框架ESLint:帮助我们检 ...
- Spring MVC + Spring + MyBatis 框架整合
本文介绍使用SSM框架开发web项目Demo. 一.创建一个web-Poject项目 1.导入相关jar文件至lib下.“相关jar文件” --提取密码 oraw 2.修改web.xml文件 < ...
- 人事管理系统为你解剖JSP
人事管理系统为你解剖JSP 前言: 之前写过两篇学习JSP的博客,<Java匹马行天下之JavaWeb核心技术——JSP>https://www.cnblogs.com/zyx110/p/ ...
- [leetcode] 51. N-Queens (递归)
递归,经典的八皇后问题. 利用一位数组存储棋盘状态,索引表示行,值为-1表示空,否则表示列数. 对行进行搜索,对每一行的不同列数进行判断,如果可以摆放符合规则,则摆放,同时遍历下一行. 遍历过程中,若 ...
- vijos P1848 记数问题
自答[119ms内存456.0 KiB] #include<iostream>using namespace std;int num = 0;void judge(int n, int x ...