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访问网络的方法直接得到数据


了解更多技术文章,欢迎关注我的个人公众号

原文地址:https://www.cnblogs.com/yuzhou1234/p/12536493.html

时间: 2024-11-08 21:40:25

Android网络开发的相关文章

android网络开发之测试机连接到服务器上面

1:本人使用Tomcat作为服务器软件,首先打开Tomcat.(可以在浏览器中输入http://www.127.0.0.1:8080/查看) 2:服务器后台使用Servelt开发,这里不再讲解. 3:打开wifi共享软件,测试机连接到局域网上面(可以在手机浏览器中输入查看).(注:IP地址不是127.0.0.1). Win+R打开命令窗口,并输入ipconfig来查看手机的IP地址. 4.在手机浏览器输入http://192.168.23.1:8080会出现Tomat服务器官网,如下: 5.连接

Android网络开发实例(基于抓包实现的网络模拟登录,登出和强制登出)

学习Android有几个月了,最近喜欢上了网络编程,于是想通过Android写一些一个小程序用于连接外网.在这里非常感谢雪夜圣诞的支持,非常感谢,给我打开新的一扇门. 1.声明,本程序只能用于西南大学连接外网登录,其他网站需要自己进行抓包测试. 2.声明,本文更多的是关注网络抓包已经,本地构造,如果有什么错误,请尽情指教,非常感谢. 3.声明,最后源代码,以全部上传github,需要的同志可以自行下载,文章结尾会附带链接. 废话不多说,正文开始: 学校官网 第一步,首先需要实现的是登录操作: 当

Android 网络开发免费API接口

http://www.juhe.cn/                              聚合数据              目前很多接口都收费 https://www.showapi.com                      易源接口              存在收费项                            API接口少 http://apistore.baidu.com/                     百度API集市 http://www.atoo

Android企业级应用程序开发完整训练:精通Android商业级开发最佳实践的24堂课

从企业级商业实战的角度入手,24小时内通过23个动手实战案例,循序渐进的对Android商业级别的应用程序开发要点各个击破,依托于在多年的Android(6款完整的硬件产品和超过20款应用软件)开发和企业级培训经验(超过150期的次Android的企业内训和公开课),旨在在实务的基础之上帮助你完成任何复杂程序的高质量Android应用程序开发,让Android开发跟上想象的速度.最后,通过ActivityManagerService揭秘Android应用程序一切行为背后的核心根源,让你从此开发应

android入门开发教程之网络性能的优化

我在麦子学院上android开发的时候,麦子学院android开发老师讲到Android开发过程中经常会涉及到性能优化的问题,应该从基础.网络.测试等各个层面进行整合优化.现在咱们聊聊Android开发之网络性能的优化. 1)避免频繁网络请求 访问server端时,建立连接本身比传输需要跟多的时间,如非必要,不要将一交互可以做的事情分成多次交互(这需要与Server端协调好).有效管理Service 后台服务就相当于一个持续运行的Acitivity,如果开发的程序后台都会一个service不停的

Android应用开发:网络工具——Volley(二)

引言 在Android应用开发:网络工具--Volley(一)中结合Cloudant服务介绍了Volley的一般使用方法.当中包括了两种请求类型StringRequest和JsonObjectRequest.一般的请求任务相信都能够通过他们完毕了,只是在千变万化的网络编程中,我们还是希望能够对请求类型.过程等步骤进行全然的把控.本文就从Volley源代码角度来分析一下.一个网络请求在Volley中是怎样运作的.也能够看作网络请求在Volley中的生命周期. 源头RequestQueue 在使用V

上门洗车APP --- Android客户端开发 之 网络框架封装(二)

上门洗车APP --- Android客户端开发 之 网络框架封装(二) 前几篇博文中给大家介绍了一下APP中的基本业务及开发本项目使用的网络架构: 上门洗车APP --- Android客户端开发 前言及业务简介 上门洗车APP --- Android客户端开发 之 网络框架封装介绍(一) 本篇接着给大家分享网络框架封装,相信感兴趣的朋友已经对上篇博文中的一些开源项目有了些许了解,这里继续为大家介绍关于GenericDataManager 通用网络管理类中的 dataRequest 方法 和

[Android应用开发] 03.网络编程

*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } a { color: #4183C4; text-decoration: none; } a.absent { color: #cc0000; } a.anchor { display: block; padding-left: 30px; margin-left: -30px; cursor: poin

玩转Android Camera开发(五):基于Google自带算法实时检测人脸并绘制人脸框(网络首发,附完整demo)

本文主要介绍使用Google自带的FaceDetectionListener进行人脸检测,并将检测到的人脸用矩形框绘制出来.本文代码基于PlayCameraV1.0.0,在Camera的open和preview流程上进行了改动.原先是放在单独线程里,这次我又把它放到Surfaceview的生命周期里进行打开和开预览. 首先要反省下,去年就推出了静态图片的人脸检测demo,当时许诺一周内推出Camera预览实时检测并绘制的demo,结果拖到现在才整.哎,屌丝一天又一天,蹉跎啊.在demo制作过程中