黑马程序员安卓教程:案例-网络源码查看器

上传人:mingti****nghao 文档编号:40990038 上传时间:2018-05-27 格式:DOCX 页数:12 大小:636.95KB
返回 下载 相关 举报
黑马程序员安卓教程:案例-网络源码查看器_第1页
第1页 / 共12页
黑马程序员安卓教程:案例-网络源码查看器_第2页
第2页 / 共12页
黑马程序员安卓教程:案例-网络源码查看器_第3页
第3页 / 共12页
黑马程序员安卓教程:案例-网络源码查看器_第4页
第4页 / 共12页
黑马程序员安卓教程:案例-网络源码查看器_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《黑马程序员安卓教程:案例-网络源码查看器》由会员分享,可在线阅读,更多相关《黑马程序员安卓教程:案例-网络源码查看器(12页珍藏版)》请在金锄头文库上搜索。

1、案例案例-网络源码查看器网络源码查看器通过该案例可以对 Android 的网络访问有个初步的认识。需求需求如图 1-1 所示。当用户在界面顶部的编辑框(EditText)中输入地址后,点击确定按钮,就开始访问网络,然后将获取到的网页源码显示在下部的 TextView 中,由于一个界面是显示不全如此多的网页源码的,因此需要用 ScrollView 将 TextView 给包裹起来。图 1-1网络源码查看器1.2.2编写布局编写布局 【文件文件 1-2】 activity_main.xml31. 6.7. 11.12.19. 20.25.26.27.31. 32.36.37. 38. 1.2.3编

2、写代码编写代码【文件文件 1-3】 MainActivity.java 1.package com.itheima.html.viewer;42.3. import java.io.InputStream;4. import .HttpURLConnection;5. import .URL;6. import android.os.Bundle;7. import android.os.Handler;8. import android.os.Message;9. import android.app.Activity; 10. import android.util.Log;11. imp

3、ort android.view.View;12. import android.widget.EditText;13. import android.widget.TextView;14. import android.widget.Toast;15. /*16.* 网络源码查看器。17.*18.* author wzy 2015-11-4 19.*20.*/21. public class MainActivity extends Activity 22.23. private TextView tv_content;24. private EditText et_url; 25. /*2

4、6.* 创建一个 Handler 对象,覆写类体 方法体 27.*/28. private Handler handler = new Handler() 29./*30.* 覆写 handleMessage 方法,在该方法中完成我们想做的工作,31.* 该方法是在主线程中被调用的,因此可以在这里修改 UI。 32.*/33.Override34.public void handleMessage(Message msg) 35./判断 Message 的类型,根据 msg 的 what 属性去获取其类型36.switch (msg.what) 37./如果成功 38.case RESULT_

5、OK:39./从 msg 的 obj 属性中获取数据,然后显示在 TextView 上。40.tv_content.setText(msg.obj.toString();41.break;42./如果失败 43.case RESULT_CANCELED:44./弹吐司,给用户以提示45.Toast.makeText(MainActivity.this, “访问网页失败“,46.Toast.LENGTH_SHORT).show();547.break;48.default:49.break;50.51.;52. ;53.54. Override55. protected void onCreat

6、e(Bundle savedInstanceState) 56.super.onCreate(savedInstanceState);57.setContentView(R.layout.activity_main);58./初始化控件59.et_url = (EditText) findViewById(R.id.et_url);60.tv_content = (TextView) findViewById(R.id.tv_content); 61. 62.63. /*64.* 加载网页源码65.*66.* param view 67.*/68. public void load(View

7、view) 69./获取用户输入的地址70.final String path = et_url.getText().toString().trim(); 71./*72.* 网络访问必须在子线程中进行 73.*/74.new Thread(new Runnable() 75.76.Override77.public void run() 78.try79./1.创建一个 URL对象,需要传入url80.URLurl=newURL(path);81./*82.* 2.使用 url 对象打开一个HttpURLConnection,83.由于其返回的是 HttpURLConnection 的父类,

8、84.*这里可以强制类型转换85.*/86.HttpURLConnectionconnection=87.(HttpURLConnection)url.openConnection();88./*89.* 3.配置connection连接参数90.*/691./设置联网超时时长,单位毫秒92.connection.setConnectTimeout(5000);93./*94.*设置数据读取超时95.*注意:不是指读取数据总耗时超时,而是能够读取到数据流等待时长96.*/97.connection.setReadTimeout(5000);98./*99.*设置请求方式,默认是 GET,但是为

9、了增加代码易读性,建议显示指明为GET100.*/101.connection.setRequestMethod(“GET“);102./4.开始连接网络103.connection.connect();104./5.以字节输入流的形式获取服务端发来的数据105.InputStreaminputStream=connection.getInputStream();106./6.将字节流转化为字符串(使用了自定义的StreamUtils工具类)107.finalStringdata=108.StreamUtils.inputStream2String(inputStream);109./*110

10、.* 7.将获取到的数据封装到 Message 对象,然后发送给 Handler111.*/112./创建一个 Message 对象113.Messagemsg =new Message();114./*115.*给 Message 对象的 what属性设置一个 int类型的值。116.*因为消息可能会有多个,因此为了区分这些不同的消息,117.*需要给消息设置 what属性。118.*RESULT_OK 是 Activity的常量值为-1,119.*当然也可以自定义一个 int类型的值。120.*/121.msg.what=RESULT_OK;122./*123.*给 Message 对象的

11、 obj 属性设置一个 Object 类型的值。124.*该值正式我们需要在 Message对象上绑定的数据,这里绑定的125.*从网络上获取到的网页源码字符串。126.*/127.msg.obj=data;128./*129.*给主线程发送消息。130.*发送后,系统会调用 handler 对象的handleMessage(Message)方法,131.*该方法正是我们自己实现的。而且该方法是在主线程中执行的。132.*从而就实现了从子线程中访问网络数据,然后交给主线程,让主线程修改UI。133.*134.*/135.handler.sendMessage(msg);7136.137.cat

12、ch(Exceptione)138.e.printStackTrace();139.Log.d(“tag“,“遇到异常“+e,e);140./*141.*如果遇到异常,最好让主线程也知道子线程遇到异常了。142.*因此使用 handler发送一个空消息,所谓的空消息是指143.*该消息没有 obj值,只有一个 what属性。144.*这里的 RESULT_CANCELED就是一个int型的常量,145.*当然我们可以自定义。这里只不过是直接使用了 Activity 类的146.*一个常量值而已。147.*该消息发送后,系统依然会调用 handler 对象的148.handleMessage(M

13、essage)149.*方法。150.*/151.handler.sendEmptyMessage(RESULT_CANCELED);152.153.154.).start();155.156. 157.158.159.注意:注意:上面使用了一个将字节输入流转化为字符串的工具类,其源码如【文件 1-4】所示。【文件文件 1-4】 StreamUtils.java 1. package com.itheima.html.viewer;2.3. import java.io.ByteArrayOutputStream;4. import java.io.IOException;5. import

14、java.io.InputStream; 6. /*7.* 将字节输入流转化为字符串的工具类。8.*9.* author wzy 2015-10-25 10.*11.*/12. public class StreamUtils 13. /*14.* 将字节流转化为字符串,使用 Android 默认编码15.* param inputStream 16.* return17.* throws IOException818.*/19. public static String inputStream2String(InputStream inputStream) throws IOException20.ByteArrayOutputStream baos = new ByteArrayOutputStream();21.int len = -1;22.byte buffer = new byte1024;23.while(len = inputStream.read(buffer)!=-1)24.baos.write(buffer, 0, len); 25.26.inputStream.close();27.return new String(baos.toByteArray(); 28. 29. 30.1.2.4添加权限添加权限网络访问必须添加对应的权限。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号