Android网络开发
1. WebView用法
①布局文件新建一个WebView,特别注意线性布局和控件的宽高都要匹配父控件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<WebView
android:id="@+id/wv_first"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
②代码中的配置
private WebView wv_first;
wv_first = (WebView) findViewById(R.id.wv_first);
// getSettings()设置浏览器的属性
// setJavaScriptEnabled(true)让WebView支持JavaScript脚本
wv_first.getSettings().setJavaScriptEnabled(true);
// setWebViewClient(new WebViewClient())
// 这段代码的作用是当我们从一个网页跳转到另外一个网页的时候,目标 // 网页仍然在WebView中显示
// 而不是打开系统浏览器
wv_first.setWebViewClient(new WebViewClient());
//传入网址,打开网页
wv_first.loadUrl("http://www.baidu.com");
③AndroidManifest.xml文件中声明权限
<uses-permission android:name="android.permission.INTERNET"/>
2. 使用HTTP协议访问网络
(1)使用HttpURLConnection
首先学习一个新的控件ScrollView
由于手机屏幕大小有限,而ScrollView允许我们通过滑动查看手机屏幕外的内容
布局文件代码如下:
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/tv_request_text"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</ScrollView>
①新建一个按钮点击事件,在按钮点击事件里开启一个子线程,用于访问网络
@Override
public void run() {
URL url;
HttpURLConnection connection;
try {
// 先new出一个URL对象,传入网络地址
// 调用openConnection()方法获取到HttpURLConnection对象
url = new URL("http://www.baidu.com");
connection = (HttpURLConnection) url.openConnection();
// 设置HTTP请求所使用的方法,GET或者POST
// GET表示从服务器获取数据
// POST表示向服务器提交数据
connection.setRequestMethod("GET");
// 下面使一些自由的定制,比如设置连接超时,读取超时的毫秒数,以及服务器希望得到的一些消息头
connection.setConnectTimeout(8000);
connection.setReadTimeout(8000);
// 接下来利用输入流对数据进行读取
InputStream is = connection.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
StringBuilder response = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
response.append(line);
}
// 读取数据完毕,接下来将数据传送到Handler进行显示
Message message = new Message();
message.what = SHOW_REQUEST;
message.obj = response.toString();
handler.sendMessage(message);
//最后关闭HTTP连接
connection.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
②因为上面代码中是在子线程中,所以不能显示在UI上,所以要用Handler机制将服务器返回的数据传递到主线程进行UI显示,具体实现代码如下:
@Override
public void handleMessage(Message msg) {
if(msg.what==SHOW_REQUEST){
String response=(String) msg.obj;
//在这里进行UI操作将结果显示到UI上
tv_request_text.setText(response);
}
}
③AndroidManifest.xml文件中声明权限
<uses-permission android:name="android.permission.INTERNET"/>
④主Activity中的代码如下
// Handler用来处理网络访问请求之后得到数据的显示
MyHandler handler = new MyHandler(tv_request_text);
// 创建访问网络的线程对象
final SendHttpRequestThread request = new SendHttpRequestThread(handler);
// 设置按钮点击事件
btn_request.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 开启线程
request.start();
}
});
(2)使用HTTPClient
①布局文件不变,开启的线程内的代码改为如下:
@Override
public void run() {
// 因为HttpClient是一个接口,所以无法直接创建它的对象,一般是用
HttpClient client = new DefaultHttpClient();
// 想要发起一条GET请求就创建一个HttpGet对象
// 并传入目标网络地址,调用HttpClient的execute()方法传入HttpGet对象
HttpGet httpGet = new HttpGet("http://www.baidu.com");
try {
// 执行execute()方法后会返回HttpResponse对象,服务器返回的所有信息就包含在这里面了
HttpResponse response = client.execute(httpGet);
// 接下来取出服务器返回的状态码,如果是200就说明请求和响应都成功了
if (response.getStatusLine().getStatusCode() == 200) {
// 请求和响应都成功了,取出返回的具体内容
// response的getEntity()得到一个HttpEntity对象
// EntityUtils这个工具类的toString()方法将得到的内容转化成字符串
// 传入"utf-8"的目的是在服务器返回中文的时候防止乱码
HttpEntity entity = response.getEntity();
String responsetext = EntityUtils.toString(entity, "utf-8");
// 接下来将数据传送到Handler进行显示
Message message = new Message();
message.what = SHOW_REQUEST;
message.obj = responsetext;
handler.sendMessage(message);
}
} catch (Exception e) {
e.printStackTrace();
}
}
②AndroidManifest.xml文件中声明权限
③主Activity中的代码如下
// Handler用来处理网络访问请求之后得到数据的显示
MyHandler handler = new MyHandler(tv_request_text);
//创建HttpCliect访问网络的线程对象
final SendClientRequestThread requestThread=new SendClientRequestThread(handler);
// 设置按钮点击事件
btn_request.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 开启线程
requestThread.start();
}
});
3. 下载Apache阿帕奇搭建Web服务器
(1) 安装环境
系统:windows 10 x86
Apache版本:Apache 2.4.29
(2) Apache的下载
第一步:
登录http://httpd.apache.org/download.cgi 这个地址,2.4.16 ,如下图位置:
第二步:
进入如下界面后,选择第一项ApacheHaus,这是个第三方下载平台,在它的网站下载独立的Apache会是一个压缩包另外四个中,第二个也是独立的Apache下载地址,另外三个是集成开发环境。我这里选的第一个。
第三步:
在新的界面中,会发现VC9和VC11和VC14字样,通过阅读相关内容得知用VS2014编译的无法在windows xp和server 2003中使用。算是为了兼容性好点吧,我这里选的用VC14编译的64位Apache,选择下载至此,下载过程完成!
三.安装
安装过程很简单,因为是压缩包,所以,先将其解压包中的 Apache24 解压到合适的位置
4. 配置httpd.conf文件
找到F:\Apache\httpd-2.4.29-o102n-x86-vc14-r2\Apache24\conf文件,用Notepad++打开,因为Notepad++是比较万能的记事本软件,所以用他打开,并且记住行号,以便于下次查找,找到:Define SRVROOT 这一项,将其右方的值改为,当前你Apache安装存放的目录地址,如下所示
apache的默认端口是80,如果发现被占用了,修改httpd.conf的如下选项,如下所示
5. 安装Apache的主服务
温馨提示:一定要以管理员身份运行,不然会报错
以管理员的身份运行cmd命令(左下角搜索框搜索命令行,右键以管理员模式打开,F:进入指定盘符,cd..进入指定目录文件),进入apache的bin目录,执行如下命令
httpd.exe -k install -n androidapache
该命令的意思是,安装apache服务,并将该服务名称命名为androidapache(你也可以改成别的),回车。
如下所示
6. 启动apache服务
在安装目录中,找到\bin\ApacheMonitor.exe可执行文件,双击运行,桌面右下角会出现图标,双击打开窗口界面,会看到如图所示:
**点击start,完成apache的启动,在浏览器中输入http://localhost:80,出现如下界面,启动成功 **
7. Apahe服务的卸载
若Apache服务器软件不想用了,想要卸载,需要先卸载apache服务(切记,若直接删除安装路径的文件夹,会有残余文件在电脑,可能会造成不必要的麻烦)
在CMD命令窗口,输入如下(建议先停止服务再删除):
sc delete apache
apache是Apache服务器的服务名
重点来了*****
①以上是Apache搭建的过程,搭建完成后,我们需要用它创建我们自己的网页
②进入到Apache的安装目录的\htdoc目录下创建一个data.html文件(自定义),随便 输入一些内容
③在浏览器中访问http://127.0.0.1/data.xml
特别注意:127.0.0.1访问的本机服务器的ip地址,要想让别人访问这个服务器,必须先查看自己电脑的本机ip,然后将127.0.0.1换成这个ip地址
这样设置之后就可以直接用上面的TTTP访问网络的方法直接得到数据
了解更多技术文章,欢迎关注我的个人公众号
Android网络开发的更多相关文章
- android网络开发之测试机连接到服务器上面
1:本人使用Tomcat作为服务器软件,首先打开Tomcat.(可以在浏览器中输入http://www.127.0.0.1:8080/查看) 2:服务器后台使用Servelt开发,这里不再讲解. 3: ...
- 《精通android网络开发》--HTTP数据通信
No1: 例如:http://www.*****.com/china/index.htm 1)http:// 代表超文本传送协议,通知*****.com服务器显示web页,通常不用输入 2)www 代 ...
- Android网络开发之实时获取最新数据
在实际开发中更多的是需要我们实时获取最新数据,比如道路流量.实时天气信息等,这时就需要通过一个线程来控制视图的更新. 示例:我们首先创建一个网页来显示系统当前的时间,然后在Android程序中每隔5秒 ...
- Android网络开发实例(基于抓包实现的网络模拟登录,登出和强制登出)
学习Android有几个月了,最近喜欢上了网络编程,于是想通过Android写一些一个小程序用于连接外网.在这里非常感谢雪夜圣诞的支持,非常感谢,给我打开新的一扇门. 1.声明,本程序只能用于西南大学 ...
- Android网络开发之蓝牙
蓝牙采用分散式网络结构以及快调频和短包技术,支持点对点及点对多点通信,工作在全球通用的2.4GHz ISM(I-工业.S-科学.M-医学)频段,其数据速率为1Mbps,采用时分双工传输方案. 蓝牙 ...
- Android网络开发之基本介绍
Android平台浏览器采用WebKit引擎,名为ChormeLite,拥有强大扩展特性,每个开发者都可以编写自己的插件. 目前,Android平台有3种网络接口可以使用,分别是:java.net, ...
- 《精通android网络开发》--使用Socket实现数据通信
No1: 网络传输应用通常使用TCP.IP或UDP这三种协议实现数据传输.在传输数据的过程中,需要通过一个双向的通信连接实现数据的交互.在这个传输过程中,通常将这个双向链路的一端称为Socket,一个 ...
- Android 网络开发免费API接口
http://www.juhe.cn/ 聚合数据 目前很多接口都收费 https://www.showapi.com ...
- Android项目开发全程(四)-- 将网络返回的json字符串轻松转换成listview列表
前面几篇博文介绍了从项目搭建到获取网络字符串,对一个项目的前期整体工作进行了详细的介绍,本篇接着上篇介绍一下怎么样优雅将网络返回的json字符串轻松转换成listview列表. 先上图,看一下效果. ...
随机推荐
- c语言函数指针的理解与使用(学习)
1.函数指针的定义 顾名思义,函数指针就是函数的指针.它是一个指针,指向一个函数.看例子: 1 2 3 A) char * (*fun1)(char * p1,char * p2); B) char ...
- VRRP笔记二:配置keepalived为实现haproxy高可用的配置文件示例
! Configuration File for keepalived global_defs { notification_email { linuxedu@foxmail.com mageedu@ ...
- 基于OpenDDS应用程序开发(3)订阅端实现
连续的三篇博文演示如何基于OpenDDS开发应用程序,将数据从发布端节点发送到订阅端节点,该示例程序由一个发布者发布数据,一个订阅者订阅数据,使用默认的QoS策略和TCP/IP传输方式. 本文是第三篇 ...
- 吴裕雄--天生自然KITTEN编程:青蛙答题过河
- Animate.css动画库,简单的使用,以及源码剖析
animate.css是什么?能做些什么? animate.css是一个css动画库,使用它可以很方便的快捷的实现,我们想要的动画效果,而省去了操作js的麻烦.同时呢,它也是一个开源的库,在GitHu ...
- Leetcode 20题 有效的括号(Valid Parentheses) Java语言求解
题目描述: 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 注意空 ...
- 难住了同事:Java 方法调用到底是传值还是传引用
Java 方法调用中的参数是值传递还是引用传递呢?相信每个做开发的同学都碰到过传这个问题,不光是做 Java 的同学,用 C#.Python 开发的同学同样肯定遇到过这个问题,而且很有可能不止一次. ...
- http面试问题集锦
1.http的请求报文和响应报文? http请求报文:请求行(请求方法+url).请求头,请求体 http响应报文:状态行(http版本+状态码).响应头.响应体 2.常用的http请求类型? 请 ...
- 用vue + leancloud开发一个免费的博客
项目地址 https://github.com/Fee-ing/Fe... 在线预览 在线预览地址: 搭建免费博客
- 天坑,CSS之定位Position(六分之五)
Position定位 个人觉得position这个属性真的算是CSS的见面杀了.尤其是absolute,当年可是被虐的不轻.当然了,现在爱上了这个属性,谁用谁知道. position属性 positi ...