HttpURLConnection 网络编程 -- 获取页面

来源:互联网 发布:vscode 编译php 编辑:程序博客网 时间:2024/05/22 00:08

HttpURLConnection 网络编程 -- 获取页面

1. 搭建布局============================<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context=".MainActivity"    android:orientation="vertical" >    <EditText        android:id="@+id/edit"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="http://"        />    <Button        android:id="@+id/btn"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="获取页面"        />    <ScrollView        android:layout_width="fill_parent"        android:layout_height="wrap_content"        >        <TextView            android:id="@+id/text"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="@string/hello_world" />    </ScrollView></LinearLayout>2清单文件================================<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="spl.example.httpurldemo"    android:versionCode="1"    android:versionName="1.0" >    <uses-permission android:name="android.permission.INTERNET" />    <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <activity            android:name=".MainActivity4"            android:label="@string/app_name"            android:windowSoftInputMode="stateHidden|stateAlwaysHidden" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    </application></manifest>[测试]...3.点击事件=====================================public class MainActivity4 extends Activity {    EditText edit;// 地址栏    Button btn; // 按钮    TextView text;// 文本框    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main_activity4);        initView();        initListener();    }    private void initView(){        edit = (EditText) findViewById(R.id.edit);        text = (TextView) findViewById(R.id.text);        btn = (Button) findViewById(R.id.btn);    }    private void initListener(){        btn.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                String urlStr= edit.getText().toString().trim();                Toast.makeText(MainActivity4.this, "url=" + urlStr,Toast.LENGTH_LONG).show();            }        });    }}[测试]...4.创建线程=====================================    //1 创建ProgressDialog    ProgressDialog progressDialog;// 进度条的对话框    public void showProgress(){        progressDialog = new ProgressDialog(this);        progressDialog.setTitle("提示");        progressDialog.setMessage("正在加载网页内容...");        progressDialog.setCancelable(true);// 允许Cancel        progressDialog.show();// 显示    }    //2 处理结果    String result;// 页面内容    Handler handler = new Handler(){        public void handleMessage(Message msg) {            if (msg.what == 1) {                text.setText(result);                Toast.makeText(MainActivity4.this, "连接成功", Toast.LENGTH_LONG).show();                progressDialog.dismiss();//  消失            }else if (msg.what == 2) {                Toast.makeText(MainActivity4.this, "连接失败", Toast.LENGTH_LONG).show();                progressDialog.dismiss();//  消失            }        };    };    //3 启动线程    public void connectNet(final String urlStr) {        new Thread() {            public void run() {                result = "测试内容:"+urlStr;                handler.sendEmptyMessage(1);            };        }.start();    }5.HttpURLConnection 编程=显示页面源码到界面================    //3 启动线程    public void connectNet(final String urlStr) {        new Thread() {            public void run() {                HttpURLConnection conn = null;                try {                    // 1)创建URL对象                    URL url = new URL(urlStr);                    // 2)获取连接对象                    conn = (HttpURLConnection) url.openConnection();                    // 3) 设置连接属性(可以省略)                    conn.setConnectTimeout(5000);                    // 4) 获取状态码                    int code = conn.getResponseCode();                    // 5) 判断状态码                    if (code == 200){                        // 6) 获取流                        InputStream is = conn.getInputStream();                        // 7) 流读取字符                        result = HttpUtil.readData(is);                        // 8) 通知UI主线程                        handler.sendEmptyMessage(1);                        // 9) 关闭流                        is.close();                    }else{                        handler.sendEmptyMessage(2);// 失败                    }                } catch (Exception e) {                    Log.i("spl", "异常:" + e.getMessage());                    e.printStackTrace();                }finally{                    // 10) 断开连接                    conn.disconnect();                }            };// run        }.start();    }/**读取输入流 1*/public static String readData(InputStream inStream) throws IOException{ByteArrayOutputStream outStream = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len = -1;while((len = inStream.read(buffer)) != -1){outStream.write(buffer, 0, len);}byte[] data = outStream.toByteArray();inStream.close();outStream.close();return new String(data,"UTF-8");}    /**读取输入流 2*/    public static String readLines(InputStream is) throws IOException{        String html ="";        InputStreamReader isr = new InputStreamReader(is);        BufferedReader bufferReader = new BufferedReader(isr);        String inputLine = "";        while ((inputLine = bufferReader.readLine()) != null) {            html += inputLine + "\n";        }        return html;    }==============================  设置键盘监听回车(按"回车"开始下载页面)==============================    private void startConnecting(){        String urlStr = edit.getText().toString().trim();        Toast.makeText(MainActivity4.this, "url=" + urlStr, Toast.LENGTH_LONG).show();        connectNet(urlStr);// 连网        showProgress();// 进度    }        // 设置键盘监听回车        edit.setOnKeyListener(new View.OnKeyListener() {            @Override            public boolean onKey(View v, int keyCode, KeyEvent event) {                if (keyCode == KeyEvent.KEYCODE_ENTER                   && event.getAction() == KeyEvent.ACTION_DOWN) {// 修改回车键功能                    // 先隐藏键盘                    ((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE))                            .hideSoftInputFromWindow(                                    getCurrentFocus().getWindowToken(),                                    InputMethodManager.HIDE_NOT_ALWAYS);                    // 开始连网                    startConnecting();                    return true;                }                return false;            }        });


0 0