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;
}


}



...全文
389 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"/>

80,350

社区成员

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

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