[android] 网络html查看器详解手机开发
访问一个网页的请求实际上就是一个GET请求,应用的布局没啥好说的,线性布局,定义好控件,在activity代码里面先获取到控件,获取到EditText控件的网络路径,开启get请求
开启一个新的线程,new Thread(){}.start()
获取Url对象,new出来,参数:path是String的url,内部类访问外部类的变量,应该顶一次final的
主线程中定义成员属性Handler对象,为了方便直接重写handleMessage()方法,回调过来的参数是Message对象,获取Message对象的what属性和obj属性,
New出Url之后,会有异常产生,捕获异常,
调用Url对象的openConnection()方法,得到HttpUrlConnection对象,这里需要强转
调用HttpUrlConnection对象的setRequestMethod()方法
调用HttpUrlConnection对象的setConnectTimeout()方法
调用HttpUrlConnection对象的setRequestProperty()方法
调用HttpUrlConnection对象的getResponseCode()方法,得到响应码,进行判断
调用HttpUrlConnection对象的getInputStream()方法,得到InputStream对象
把流的数据转换成文本,是一个非常常用的操作,新建一个包utils,放工具类
新建一个类StreamTools,里面定义一个静态方法readInputStream()
获取ByteArrayOutputStream对象,通过new一个字节数组输出流
定义一个int的len长度是0
定义一个byte[]的数组,通过new byte[1024]定义一个1024字节的数组
定义一个while循环,条件是调用InputStream对象的read(buffer)方法,参数:上面定义的byte[]数组,把数据读入到byte[]数组里面,返回一个读取的长度,如果长度等于-1那就是读到末尾了,因此这个进行循环判断
调用ByteArrayOutputStream对象的write(buffer,0,len)方法,读取字节数组,从0开始到len长度
循环完成之后,关闭输入流,调用ByteArrayOutputStream对象的toByteArray()得到一个字节数组,return出来用new String()包装一下
调用Handler对象的sendMessage()方法发送数据
当设置请求参数的时候,不能多加冒号,否则容易出错
package com.tsh.hrmlviewer; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import com.tsh.hrmlviewer.utils.StreamTools; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.text.TextUtils; import android.view.View; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity { protected static final int SUCCESS = 1; protected static final int ERROR = 2; private EditText et_path; private TextView tv_show; // 消息处理器 public Handler handler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case SUCCESS: String text = (String) msg.obj; tv_show.setText(text); break; case ERROR: Toast.makeText(MainActivity.this, "获取数据失败", 0).show(); break; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et_path = (EditText) findViewById(R.id.et_path); tv_show = (TextView) findViewById(R.id.tv_show); // 查看 public void click(View v) { final String path = et_path.getText().toString().trim(); if (TextUtils.isEmpty(path)) { Toast.makeText(this, "请输入网址", 0).show(); } else { // 开启新线程 new Thread() { public void run() { try { URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url .openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(5000); int code = conn.getResponseCode(); if (code == 200) { InputStream is = conn.getInputStream(); String res = StreamTools.readInputStream(is); Message msg = new Message(); msg.what = SUCCESS; msg.obj = res; handler.sendMessage(msg); } else { Message msg = new Message(); msg.what = ERROR; handler.sendMessage(msg); } catch (Exception e) { e.printStackTrace(); Message msg = new Message(); msg.what = ERROR; handler.sendMessage(msg); }.start(); }
工具类:
package com.tsh.hrmlviewer.utils; import java.io.ByteArrayOutputStream; import java.io.InputStream; public class StreamTools { /** * 读取输入流 * @param is * @return public static String readInputStream(InputStream is){ ByteArrayOutputStream baos=new ByteArrayOutputStream(); int len=0; byte[] buffer=new byte[1024]; try { while((len=is.read(buffer))!=-1){ baos.write(buffer,0,len); is.close(); byte[] res=baos.toByteArray(); return new String(res); } catch (Exception e) { e.printStackTrace(); return null; }
5481.html
app程序应用开发手机开发无线开发移动端开发相关文章
- android 常用加密,分享一下Android各种类型的加密
- Android开发:CompoundButton.onCheckedChangeListener和RadioGroup.onCheckedChangeListener冲突问题「建议收藏」
- android toast显示时间,Android Toast自定义显示时间「建议收藏」
- Android中ActivityManager学习笔记(1)-MemoryInfo「建议收藏」
- android跳转到相册需要权限,Android打开相册获取图片路径[通俗易懂]
- 【Android FFMPEG 开发】FFMPEG 初始化 ( 网络初始化 | 打开音视频 | 查找音视频流 )
- 【Android 逆向】Android 逆向通用工具开发 ( 静态库项目中的网络操作核心类 CNetwork 分析 )
- 【Android Gradle 插件】PackagingOptions 配置 ③ ( merges 属性配置 | excludes 属性配置 )
- 【Android UI】贝塞尔曲线 ④ ( 使用 android.graphics.Path 提供的 cubicTo 方法绘制三阶贝塞尔曲线示例 )
- Android处理网络和图片的工具类详解手机开发
- [android] 手机卫士号码归属地查询详解手机开发
- [android] 手机卫士读取联系人详解手机开发
- 基于Python的Android图形锁破解程序详解编程语言
- Android系统与Linux之间的联系(android和linux)
- Android系统自带样式(android:theme)
- android实现关闭或开启移动网络数据
- android的activity跳转到另一个activity
- 真正的android程序入口
- Android提高之TelephonyManager功能探秘
- Android提高之MediaPlayer播放网络音频的实现方法