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

深入Android应用开发 核心技术解析与最佳实践 阅读详情
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();

    }
}

 

Android核心技术及实例源码解读与应用 本文还有配套的精品资源,点击获取 简介:本书是深入学习Android开发核心技术和实践应用的宝贵资源。它详细解析了Android系统的架构、Activity与生命周期、Intent与BroadcastReceiver、ContentProvider、Service、多线程与AsyncTask、权限管理、Fragment、UI设计与布局,以及网络编程等关键技术点。源码包含了完... 阅读详情

相关推荐

Android核心技术

Android核心技术教程,整套开发视频源码以及开发文档。

android 核心

AsyncTask是一个抽象类,它是由Android封装的一个轻量级异步类,它可以在线程池中执行后台任务,然后把执行的进度和最终结果传递给主线程并在主线程中更新UI。AsyncTask的内部封装了两个线程池(SerialExecutor和THREAD_POOL_EXECUTOR)和一个Handle(InternalHandler)。

l986493387的专栏 376

农业AI避坑指南:用YOLO11做叶片病害检测时遇到的5个典型问题

本文分享了使用YOLO11模型进行农业叶片病害检测时常见的五个典型问题及解决方案。针对田间多变光照、病害样本不均衡、标注歧义、背景干扰和边缘部署等挑战,提供了包括场景自适应数据增强、解耦训练、软标签与鲁棒损失函数、困难负样本构建以及模型轻量化部署在内的实战经验,旨在帮助开发者提升农业AI项目的落地效果。

ujm56789012的博客 205

Android 读取res文件中raw的json文件 的工具类StreamUtils

public class StreamUtils { public static String get(Context context, int id) { InputStream stream = context.getResources().openRawResource(id); return read(stream); } public static String r

无论何时都不要停止学习,这是改变自己的必要条件 3805

sap 新增科目表_SAP系统中四大科目表的总结

操作科目表定义-OB13 2国家科目表定义-OB13 3集团科目表定义-OB13 4合并科目表(ECCS)定义-CX10 4分配操作科目表到公司代码-OB62 5分配国家科目表到公司代码-OB62 6分配集团科目表到操作科目表-OB13 6分配集团科目表到合并科目表-CXNF 7Operation 8定义集团科目表的科目-FSP0 8定义国家科目表的科目-FSP0 8定义操作科目表的科目-FSP0...

weixin_39585463的博客 1721

C++继承与多态 - 继承多态原理01

C++继承多态原理讲解

大秦坑王的专栏 2975

欢迎使用优快云-markdown编辑器

一 android基本架构 1-1 架构图直观 1-2 架构详解 1-2-1 Linux Kernel 1-2-2 Android Runtime 1-2-3 Libraries 1-2-4 Application Framework 1-2-5 Applications 1-3 总结 二 android dialog 三 图片 3-1 使用 MediaStoreImagesMediagetBitm

amoscxy的博客 2428

【自动驾驶】汽车智能驾驶计算芯片

本文介绍汽车智能驾驶计算芯片的软硬件要求、 可靠性和安全性要求、 性能要求,和相应的试验方法。除了用于汽车智能驾驶, 其他领域的计算芯片可参照执行。

Mr.Cssust的博客 2631

安卓核心技术高级——volley

Volley 除了简单易用之外,Volley在性能方面也进行了大幅度的调整,它的设计目标就是非常适合去进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如说下载文件等,Volley的表现就会非常糟糕。 Volley提供的功能: JSON,图像等的异步下载; 网络请求的排序(scheduling) 网络请求的优先级处理 缓存 多级别取消请求 和Activity和生命周期的联动 安...

asjklm的博客 464

SQL的基本介绍

1.什么是数据库?2.什么是数据库管理系统?3.什么是 SQL?1.数据库是保存有组织的数据的容器,通常是一个文件或一组文件,可以将其看作电子化的文件柜。用户可以对文件中的数据执行新增、删除、更新、查询等操作。2.数据库管理系统是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。用户可以通过 DBMS 访问数据库中的数据,数据库管理员也可以通过 DBMS 进行数据库的维护工作。

shiwei0813的博客 2878

【全网首发】2026华为OD双机位C卷 机考真题题库含考点说明以及在线OJ(OD上机考试双机位C卷)

【全网首发】2026华为OD机位C卷 机考真题题库含考点说明以及在线OJ(OD上机考试双机位C卷)

算法大师! 8747

Android 核心技术

深入学习Android核心技术,课程内容包括: Android 应用基础、Intent 和 Intent Filter、Activity、Fragment(片段)、任务和回退栈、Service、Content Provider、BroadcastReceiver、应用资源。

【LAMMPS学习】五、LAMMPS命令(1) LAMMPS 输入脚本

本部分描述了 LAMMPS 输入脚本的格式以及其中的命令如何用于定义 LAMMPS 模拟。主要包括以下内容。

荷塘阅色 2644

StreamUtils工具类,获取inputStream中的数据

package com.glsite.qqloginweb; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import java.io.ByteArrayOutputStream; import java.io.InputStream; /** * @author glsite.com...

苏凯的博客 1756

用一组可复现实验讲清 ABAP 内表 Standard / Sorted / Hashed 的性能差异

摘要(150字): SAP项目中性能问题常源于ABAP内表选型不当。标准表(STANDARD TABLE)写入快但查找慢(线性扫描),适合遍历场景;排序表(SORTED TABLE)保持有序,支持二分查找,适合范围查询;哈希表(HASHED TABLE)基于唯一键实现常数级查找,适合高频精确匹配。实验表明:标准表+BINARY SEARCH需预排序,成本可能高于直接使用排序表;哈希表在键匹配时性能最优。Gateway和RAP场景中,内表选型直接影响接口响应,建议根据读写负载(追加/遍历/精确查找)选择对应类

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 200

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Android中一些基本的工具类,如ToastUtils,PrefUtils,StreamUtils,MD5Utils...

对SharePreference的封装: public class PrefUtils { public static void putBoolean(String key, boolean value, Context ctx) { SharedPreferences sp = ctx.getSharedPreferences("config", Context.MODE_PRI

碎叶的痕迹 3054

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

StreamUtils工具类

StreamUtils工具类

lx251845027的专栏 3964

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Spring 中StreamUtils教程

Spring 中StreamUtils教程 本文我们介绍StreamUtils类使用。StreamUtils是spring中用于处理流的类,是java.io包中inputStream和outputStream,不是java8中Steam。使用时仅依赖spring-core,主要需要了解几个静态方法。 拷贝Stream StreamUtils类包括几个重载copy()方法,也包括几个变体:...

neweastsun的专栏 1万+

StreamUtils

package activitylife.meng.com.activitylife; import java.io.ByteArrayOutputStream; import java.io.InputStream; /** * Created by meng on 2016/10/6. */ public class StreamUtils { /** * 从输入流

Lespace 1881

安卓核心技术高级——android-asyne-http组件

加粗样式

asjklm的博客 396

安卓核心技术高级——动画与图形

动画类型 参考博客:https://www.cnblogs.com/ldq2016/p/5407061.html Android系统提供了很多丰富的API去实现UI的2D与3D动画,最主要的划分可以分为如下几类: View Animation: 视图动画在古老的Android版本系统中就已经提供了,只能被用来设置View的动画。 Drawable Animation: 这种动画(也叫Fra...

asjklm的博客 476

Android掌握什么技术才不会被淘汰

经过最近大半年的资本寒冬,加之互联网趋于理性,移动开发唱衰的趋势逐年增加,以至于让大家人心慌慌,很多百万粉丝的自媒体也不断鼓吹移动开发的死亡潮,所以今天发文目的是让做移动开发的同学心理有个底,我相信你看完本文你会有收获! 普通程序员的发展路线 暂且不看移动开发的出路,就按目前程序员的普遍发展,很多人会一直朝着技术专家发展,但是,很多人在还到没技术专家的时候,就半路夭折了。 开发本可以转测试,转产...

Android 开发架构 2401

安卓核心技术中级——Service

目录 四个方法: onStartCommand() onBind() onCreate() onDestroy() 两种方式 StartService Service IntentService BoundService MessengerService 四个方法: onStartCommand() The system calls this method whe...

asjklm的博客 581

Android核心技术之(1)---android快速入

1.Android各个版本: •1.5 Cupcake(纸杯蛋糕)--API 3 •1.6 Donut(甜甜圈) --API 4 •2.1 Éclair(闪电泡芙) --API 7 •2.2 Froyo(冻酸奶) --API 8 •2.3Gingerbread(姜饼) –API 9 •3.0 Honeycomb(蜂巢) –API 11 •4.0 Icecream SandWich

何方勇的博客 840

Static interface methods are only supported starting with Android N (--min-api 24): void butterknif

指定项目的 jdk 版本 为 1.8 主工程 app 目录下 build.gradle   android { ... // 指定jdk版本 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VER...

知识改变一切 802
上一篇: Android核心技术-day04-01-网络图片查看器(安卓消息循环机制)
下一篇: Android核心技术-day04-03-开源SmartImageview
心灵泽尘
博客等级 码龄10年 32粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值