Android核心技术-day04-02-网页源代码查看器(StreamUtils)

package com.gaozewen.htmlviewer.utils;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
/**
 * 流的工具类
 * @author gzw
 * @version $Rev$
 * @des ${TODO}
 * @updateAuthor $Author$
 * @updateDes ${TODO}
 */
public class StreamUtils {
    /**
     * 读取流的数据 返回一个字符串
     * @param is 获取流
     * @return 字符串,如果解析失败返回空
     */
    public static String readStream(InputStream is) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len = 0;
        try {
            while((len = is.read(buffer))!= -1){
                baos.write(buffer,0,len);
            }
            is.close();
            String result = baos.toString();
            if(result.contains("gb2312")){
                return baos.toString("gb2312");
            }else if (result.contains("gbk")){
                return baos.toString("gbk");
            }
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}
package com.gaozewen.htmlviewer;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.gaozewen.htmlviewer.utils.StreamUtils;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class MainActivity extends AppCompatActivity {

    private static final int LOAD_SUCCESS = 1;
    private static final int LOAD_ERROR = 2;
    private EditText mEt_url;
    private TextView mTv_result;
    private Handler mHandler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what){
                case LOAD_SUCCESS:
                    String text = (String) msg.obj;
                    mTv_result.setText(text);
                    break;
                case LOAD_ERROR:
                    Toast.makeText(MainActivity.this,"加载失败", Toast.LENGTH_SHORT).show();
                    break;
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mEt_url = (EditText) findViewById(R.id.et_url);
        mTv_result = (TextView) findViewById(R.id.tv_result);
    }

    /**
     * 1. 声明权限
     * 2. 开启子线程
     *
     * @param view
     */
    public void viewHtmlSource(View view) {
        final String str_url = mEt_url.getText().toString().trim();
        if (TextUtils.isEmpty(str_url)) {
            Toast.makeText(this, "url不能为空", Toast.LENGTH_SHORT).show();
            return;
        }
        new Thread() {
            @Override
            public void run() {
                try {
                    URL url = new URL(str_url);
                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                    conn.setRequestMethod("GET");
                    int code = conn.getResponseCode();
                    if (code == 200){
                        InputStream is = conn.getInputStream();
                        // 将输入流转化为字符串
                        String text = StreamUtils.readStream(is);

                        Message msg = Message.obtain();
                        msg.obj = text;
                        msg.what = LOAD_SUCCESS;
                        mHandler.sendMessage(msg);
                    }else {
                        Message msg = Message.obtain();
                        msg.what = LOAD_ERROR;
                        mHandler.sendMessage(msg);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    Message msg = Message.obtain();
                    msg.what = LOAD_ERROR;
                    mHandler.sendMessage(msg);
                }
            }
        }.start();

    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android核心技术与实例详解 图书简介: 本书以Android应用程序的开发为主题 并结合真实的案例向读者详细介绍了Android的基本组件的使用及应用程序开发的整个流程 全书分为三篇共18章 第一篇以简单易懂的实例为依托 详细介绍了Android平台的基本控件 高级控件 常用界面布局及菜单对话框等相关知识;第二篇介绍了Android平台的高级知识 包括消息与广播服务 网络数据处理 手机通信功能 桌面组件 多媒体采集 Google服务及3D程序开发等;第三篇则对三个真实案例的开发步骤进行详细介绍 逐步向读者讲解Android手机应用程序的真实开发过程 同时在源代码中还包含了详细的注释 以尽量帮助读者掌握代码中的每一个细节 尽快掌握Android编程 本书的讲述由浅入深 从介绍Android平台的基本组件到带领读者开发大型应用程序 结构清晰 语言简洁 非常适合初学者和进阶开发者阅读参考 本书附赠DVD光盘1张 其中包含了大容量的手把手教学视频 电子教案 PPT 实例源代码Android核心技术与实例详解 图书目录: 基础篇 第1章 Android开发起步 1 1 Android平台简介 1 1 1 Android背景介绍 1 1 2 Android平台架构 1 2 Android开发环境的搭建 1 2 1 相关软件的下载与安装 1 2 2 虚拟设备的创建和使用 1 2 3 创建“Hello Android” 1 2 4 Android应用程序的调试 1 3 小结 第2章 Android应用程序的构成 2 1 Android应用程序的解析 2 1 1 目录结构 2 1 2 资源的管理与使用 2 1 3 AndroidManifest xml简介 2 1 4 应用程序的权限 2 2 Android基本组件的介绍 2 2 1 应用程序的生命周期 2 2 2 Activity简介 2 2 3 Service简介 2 2 4 BroadcastReceiver简介 2 2 5 ContentProvider简介 2 2 6 Intent和IntentFilter简介 2 3 小结 第3章 Android布局管理器 3 1 控件概述 3 1 1 View简介 3 1 2 ViewGroup简介 3 2 线性布局 3 2 1 LinearLayout简介 3 2 2 线性布局案例 3 3 表格布局 3 3 1 TableLayout简介 3 3 2 表格布局案例 3 4 相对布局 3 4 1 RelativeLayout简介 3 4 2 相对布局案例 3 5 帧布局 3 5 1 FrameLayout简介 3 5 2 帧布局案例 3 6 绝对布局 3 6 1 AbsoluteLayout简介 3 6 2 绝对布局案例 3 7 小结 第4章 Android常用基本控件 4 1 文本控件的介绍 4 1 1 TextView简介 4 1 2 EditText简介 4 1 3 文本框使用案例 4 2 按钮控件 4 2 1 Button简介 4 2 2 ImageButton简介 4 2 3 9Patch图片简介 4 2 3 9Patch图片使用案例 4 3 状态开关按钮 4 3 1 ToggleButton简介 4 3 2 开关按钮的使用 4 4 单选按钮与复选按钮 4 4 1 CheckBox和RadioButton简介 4 4 2 单选按钮和复选按钮使用案例 4 5 图片控件 4 5 1 ImageView简介 4 5 2 图片查看器 4 6 时钟控件 4 6 1 AnalogClock和DigitalClock简介 4 6 2 时钟控件使用案例 4 7 日期与时间选择控件 4 7 1 DatePicker简介 4 7 2 TimePicker简介 4 7 3 日期时间控件使用案例 4 8 动画播放技术 4 8 1 帧动画简介 4 8 2 帧动画使用案例 4 8 3 补间动画简介 4 8 4 补间动画使用案例 4 9 小结 第5章 Android常用高级控件 第6章 菜单与对话框 高 级 篇 第7章 Android事件处理模型 第8章 游戏与3D应用程序开发 第9章 消息广播与服务 第10章 网络与数据处理 第11章 手机通信功能开发 第12章 手机特有Feature开发 第13章 桌面组件与多媒体数据采集 第14章 传感器应用的开发 第15章 Google服务 第16章 Android游戏开发实践 快乐数独 案例篇 第17章 Android地图搜索应用 美食天下 第18章 Android社交分享平台 口袋微博">Android核心技术与实例详解 图书简介: 本书以Android应用程序的开发为主题 并结合真实的案例向读者详细介绍了Android的基本组件的使用及应用程序开发的整个流程 全书分为三篇共18章 第一篇以简单易懂的实例为依托 详细 [更多]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值