android练习HttpURLConnection,获取网页代码结果显示页面一直是空的

野蛮生长001 2017-09-30 11:59:08
package com.example.gongxin2.http;

import android.os.Bundle;
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 {

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

edit = (EditText) findViewById(R.id.edit);
text = (TextView) findViewById(R.id.text);


}
//点击按钮进行查看路径的源码
public void click(View v) {
try {
Toast.makeText(this,"1",Toast.LENGTH_SHORT).show();
//[1]拿到路径
String path = edit.getText().toString().trim();

//[2]创建url对象,指定我们要访问的路径
URL url = new URL(path);

//[3]拿到httpurlconnection对象,用于发送或接受数据
HttpURLConnection urlconnection = (HttpURLConnection) url.openConnection();

//[4]设置发送get请求
urlconnection.setRequestMethod("GET");//设置请求的方法get大写。接受一个字符串类型,这个方法默认get

//[5]设置请求的超时时间5秒
urlconnection.setConnectTimeout(5000);

//[6]返回服务器返回的状态码,200--请求成功;404--找不到资源
int code = urlconnection.getResponseCode();

if(code == 200){
Toast.makeText(this, "请求成功", Toast.LENGTH_SHORT).show();
//[7]请求成功,获取服务器返回的数据,服务器返回的数据是以流的形式返回的
InputStream in = urlconnection.getInputStream();

//因为无法将流直接展示到TextView上,所以将流转换成字符串,
//因为将流转换成字符串是非常常见的操作,就写成工具类(utils)
//使用我们定义的工具类把inputStream 转换成String
String str = utils.readIn(in);

//[8]把流里边的数据展示到TextViewa上
text.setText(str);
}else{
Toast.makeText(this,"请求失败",Toast.LENGTH_LONG).show();
}



}catch (Exception e){

e.printStackTrace();
}


}

}



public class utils {

//把一个inputStream 转换成一个 String
public static String readIn(InputStream in) throws Exception {

//定义一个内存输出流(将读出来的数据写到内存中)
ByteArrayOutputStream baos = new ByteArrayOutputStream();

byte[] buffer = new byte[1024];
int len = -1;
while((len=in.read(buffer))!=-1){
baos.write(buffer,0,len);
}
in.close();
String str = new String(baos.toByteArray());
return str;
}


}



...全文
385 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
野蛮生长001 2017-10-01
  • 打赏
  • 举报
回复
看着视频写的,,,,那老师用的2.0的展示的,谢谢
jklwan 2017-09-30
  • 打赏
  • 举报
回复
网络请求不能在主线程,网络权限加了吗

        new AsyncTask<String,Object,String>(){
            @Override
            protected String doInBackground(String... params) {
               String str = "";
                try {

               //[2]创建url对象,指定我们要访问的路径
              URL url = new URL(params[0]);
               ............
                str = utils.readIn(in);
                } catch (Exception ex) {
                    ex.printStackTrace();
                } finally {
                    try {
                        if (in != null) {
                            in.close();
                        }
                    } catch (IOException ex) {
                        ex.printStackTrace();
                    }
                }
                return str;
            }

            @Override
            protected void onPostExecute(String result) {
                text.setText(result);
            }
        }.execute(edit.getText().toString().trim());
网络权限放到AndroidManifest.xml文件中<application标签之前

<uses-permission android:name="android.permission.INTERNET"/>
目录 第一篇 Android开发初步 第1章 Android初识 1.1 Android简介 1.1.1 认识Android 1.1.2 Android系统框架 1.1.3 应用程序框架 1.2 Eclipse开发环境 1.2.1 安装ADT插件 1.2.2 安装SDK 1.2.3 配置源代码 1.2.4 创建AVD 1.3 Android模拟器 1.3.1 ADB工具 1.3.2 其它常用工具 1.4 本章小结 第2章 应用程序构建 2.1 创建Android工程 2.2 HelloAndroid详解 2.2.1 程序结构 2.2.2 代码分析 2.3 权限permission 2.4 LogCat日志调试 2.5 示例练习 2.5.1 登录界面 2.5.2 事件处理 2.6 本章小结 第二篇 Android开发关键组件 第3章 Activity(活动) 3.1 什么是任务 3.2 Activity的生命周期 3.3 基本用法 3.3.1 创建Activity 3.3.2 启动Activity 3.3.3 窗口Activity 3.3.4 Activity生命周期验证 3.4 Activity之间通信 3.4.1 Activity传递一般类型 3.4.2 Activity传递对象类型 3.4.2 Activity回传数据 3.5 Activity加载模式 3.6 本章小结 第4章 Intent (意图) 4.1 显式Intent 4.2 隐式Intent 4.2.1 IntentFilter 4.2.2 调用系统组件 4.3 本章小结 第5章 BroadcastReceiver (广播) 5.1 生命周期 5.2 广播类型 5.2.1 普通广播 5.2.2 有序广播 5.2.3 异步广播 5.3 系统广播应用 5.3.1 系统广播 5.3.2 开机启动程序 5.3.3 电量监测 5.4 本章小结 第6章 Service(服务) 6.1 生命周期 6.2 Binder机制 6.3 AIDL基础 6.3.1 定义AIDL接口 6.3.2 使用AIDL开发程序的一般步骤 6.3.3 实现远程控制计数器示例 6.4 AIDL深入练习 6.4.1 服务端实现 6.4.2 客户端实现 6.5 系统服务 6.5.1 获得系统服务 6.5.2 获取屏幕分辨率 6.5.3 剪贴板服务 6.5.4 电话服务 6.5.5 定时提醒服务 6.5.6 音频服务 6.5.7 传感器服务 6.5.8 位置服务 6.6 本章小结 第三篇 Android开发基础详解 第7章 常用控件 7.1 Button(按钮) 7.2 ImageButton(图片按钮) 7.3 ToggleButton(开关按钮) 7.4 TextView(文本视图) 7.5 ImageView(图片视图) 7.6 EditText(编辑框) 7.7 RadioButton(单选按钮) 7.8 CheckBox(多选框) 7.9 Spinner(下拉列表) 7.10 AutoCompleteTextview(自动完成) 7.11 DataPicker&TimePicker;(日期&时间) 7.12 ProgressBar (进度条) 7.12.1 横向进度条 7.12.2 旋转型进度条 7.13 SeekBar (拖动条) 7.14 RatingBar(评分条) 7.15 本章小结 第8章 界面布局 8.1 基本布局 8.1.1 线性布局 8.1.2 相对布局 8.1.3 绝对布局 8.1.4 Frame布局 8.1.5 表格布局 8.2 Tab布局 8.3 ScrollView 8.4 ListView(列表) 8.4.1 继承自ListActivity 8.4.2 ListView灵活运用 8.5 GirdView(网格) 8.6 WebView(网页) 8.6.1 WebView加载web页面 8.6.2 WebView中对JavaScript的支持 8.7 Gallery (画廊) 8.8 SlidingDrawer(滑动抽屉) 8.9 Dialog(对话框) 8.9.1 AlertDialog警告框 8.9.2 ProgressDialog进度框 8.9.3 DatePickerDialog & TimePickerDialog(日期时间选择框) 8.10 Menu(菜单) 8.10.1 options menu 8.10.2 contex

80,337

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧