安卓开发之HttpURLConnection类和Handler类的使用
package com.lidaochen.test; import java.io.ByteArrayOutputStream;
import java.io.InputStream; public class StreamTools {
// 把InputStream转换成String
public static String readStream(InputStream in) throws Exception
{
// 定义一个内存输出流
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
int len = -1;
byte[] buffer = new byte[1024]; // 1kb
while ((len = in.read(buffer)) != -1)
{
byteArrayOutputStream.write(buffer, 0, len);
}
in.close();
String content = new String(byteArrayOutputStream.toByteArray());
return content;
}
}
package com.lidaochen.test; import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast; import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL; public class MainActivity extends AppCompatActivity {
protected final int REQUESTSUCESS = 0;
protected final int REQUESTNOTFOUND = 1;
protected final int REQUESTEXCEPTION = 2;
private EditText et_path;
private TextView tv_result;
// 在主线程中定义一个handler
private Handler handler = new Handler()
{
// 这个方法是在主线程里面执行的
@Override
public void handleMessage(android.os.Message msg) {
// super.handleMessage(msg);
// 区分一下是发送的哪条消息
switch (msg.what)
{
case REQUESTSUCESS:
// 代表请求成功
String content = (String)msg.obj;
tv_result.setText(content);
break;
case REQUESTNOTFOUND:
Toast.makeText(getApplicationContext(), "请求的资源不存在!", Toast.LENGTH_SHORT).show();
break;
case REQUESTEXCEPTION:
Toast.makeText(getApplicationContext(), "服务器繁忙,请稍后......", Toast.LENGTH_SHORT).show();
break;
default:
break;
} }
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 找到EditText控件
et_path = (EditText)findViewById(R.id.et_path);
// 找到EditText控件
tv_result = (TextView)findViewById(R.id.tv_result);
}
// 避免anr 可以把耗时的操作放到子线程中
// 在4.0之后谷歌强制要求连接网络不能在主线程进行访问
// 只有主线程才可以更新UI
public void click(View v)
{
// 创建一个子线程
new Thread()
{
public void run()
{
try
{
// 获取源码网址路径
String path = et_path.getText().toString().trim();
// 创建URL对象,指定我们要访问的网址
URL url = new URL(path);
// 拿到HttpURLConnection对象,用于发送或者接收数据
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// 设置发送get请求
connection.setRequestMethod("GET"); // get要求大小,其实默认就是get请求
// 设置请求超时时间
connection.setReadTimeout(5000);
// 获取服务器返回的状态码
int code = connection.getResponseCode();
// 如果code == 200说明请求成功
if (code == 200)
{
// 获取服务器返回的数据,是以流的形式返回的
InputStream is = connection.getInputStream();
// 使用我们定义的工具类,把is 转换成String
String content = StreamTools.readStream(is);
// 创建message对象
Message msg = new Message();
msg.what = REQUESTSUCESS;
msg.obj = content;
// 用我们创建的handler助手给系统发消息
handler.sendMessage(msg);
}
else
{
// 请求资源不存在 Toast是一个view 也不能在在线程更新ui
Message msg = new Message();
msg.what = REQUESTNOTFOUND;
handler.sendMessage(msg);
}
}
catch (Exception e)
{
e.printStackTrace();
Message msg = new Message();
msg.what = REQUESTEXCEPTION;
handler.sendMessage(msg);
}
}
}.start();
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/et_path"
android:hint="请输入网址..."/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="查看"
android:onClick="click"/>
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/tv_result"/>
</ScrollView>
</LinearLayout>
安卓开发之HttpURLConnection类和Handler类的使用的更多相关文章
- android开发之 Wifi的四个类
android开发之 Wifi的四个类 在Android中对Wifi操作,android本身提供了一些实用的包,在android.net.wifi包以下.简介一下: 大致能够分为四个基本的类ScanR ...
- spark快速开发之scala基础之3类,对象,特征
类 scala的类定义非常灵活 class test4 class test2{} class test3(x:Int) 定义一个带构造函数的类 class Point (x : Int,y : In ...
- 安卓开发之json解析
1.从网页获取json返回字符串 public class ReadNet extends AsyncTask<URL, Integer, String> { @Override ...
- Liferay7 BPM门户开发之34: liferay7对外服务类生成(RestService Get Url)
在liferay7中开发不依赖Service Builder的对外服务类,非常简洁,只需要2点注解: 在类的前部定义: @ApplicationPath("/PathXXX") 方 ...
- 安卓开发之ListAdapter(一)
Adapter常用来管理数据,是连接后端数据和前端显示的适配器接口,是数据和UI(view)之间一个重要的纽带.再常见的view(listview.gridview)等地方都需要用到adapter,下 ...
- 安卓开发之RecyclerView
RecyclerView是一个非常好用的控件,它的效果和ListView很相似,甚至可以说RecyclerView的出现是来取代ListView的 RecyclerView比ListView更加灵活, ...
- 安卓开发之APK安装之后自动在桌面上创建快捷图标
可以看到很多的APP在第一次运行之后就会弹出来一个Toast说什么快捷方式已创建,那么这个东西是怎么搞出来的呢 很简单就下面几句话,写在这儿以后好copy 先创建一个类 import android. ...
- 安卓开发之Room实体定义数据
使用Room实体定义数据 在Room库中,entities(实体)代表着相关字段集.每一个entity(实体)代表着相关联数据库中的一个表.entity 类必须通过Database 类中的entiti ...
- 安卓开发之Toolbar
根据官网的教程,发现实现与预期不一致,查看相关资料自己整理了一下(官网开发文档:https://developer.android.com/training/appbar/setting-up.htm ...
随机推荐
- onNewIntent
当Activity不是Standard模式,并且被复用的时候,会触发onNewIntent(Intent intent) 这个方法,一般用来获取新的Intent传递的数据 我们一般会把MainAcit ...
- Hexo博客skapp主题部署填坑指南
相信大家都很喜欢 hexo skapp 的主题,由于作者采用结巴分词,加上需要依赖各种各样的环境 所以可能大家踩过很多坑,也许每个人踩得坑不一样,这里使用 Docker 容器 centos 来部署, ...
- 21 Flutter仿京东商城项目 商品详情 请求接口渲染数据 商品属性数据渲染
加群452892873 下载对应21可文件,运行方法,建好项目,直接替换lib目录,在往pubspec.yaml添加上一下扩展. cupertino_icons: ^0.1.2 flutter ...
- ios 本地模糊搜索
/* 手机 选择区域 模型 */ #import <Foundation/Foundation.h> NS_ASSUME_NONNULL_BEGIN @interface MYSelect ...
- Win10安装多个MySQL实例
Win10安装MySQL-8.0.15 1.下载mysql-8.0.15-winx64.zip安装包,地址如下 https://cdn.mysql.com//Downloads/MySQL-8.0/m ...
- prometheus监控插件mysqld_exporter
1,首先需要增加授权 mysql> GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost' IDEN ...
- STM32命名规则解析
- onethink多图上传
模板处理, 可以参考 checkbox 的. 注:edit 方法的 基本一样,需要先把已有的数据展示出来,绑定双击事件,删除图片 需要先绑定给已经展示出来的图片, uploadPicture 的cal ...
- SSH命令工具研究报告
0 什么是SSH Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境.SSH通过在网络中创建安全隧道来实现SSH客户端与服务器 ...
- manjaro-VM虚拟机vmmon错误
1.安装AUR : vmware-systemd-serverices 2.启动服务: systemctl enable vmware.service systemctl start vmware.s ...