zoukankan      html  css  js  c++  java
  • (十三)网络html查看器

    一:此节的重点部分:如何把输入流的数据转化为字符串功能的实现,详情见五:StreamTools.java。注意:访问网络一定要加权限:    <uses-permission android:name="android.permission.INTERNET" />

    功能需求:在EditText输入网址,点击浏览将可以查看到一个网页的html文件。程序运行结果如下所示:

    二:整个程序的结构图如下所示:

    三、activity_main.xml文件的具体代码如下所示:

    <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:orientation="vertical"
        tools:context="com.example.htmlview.MainActivity" >
    
        <EditText
            android:id="@+id/et_path"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:hint="请输入网址"
            android:text="http://www.cnblogs.com/fuyanan/p/4080201.html" />
    
        <Button
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:onClick="click"
            android:text="浏览" />
    
        <ScrollView
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" >
    
            <TextView
                android:id="@+id/tv_content"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent" />
        </ScrollView>
    
    </LinearLayout>

    四、MainActivity.java代码如下所示:

    package com.example.htmlview;
    
    import java.io.InputStream;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    
    import com.example.htmlview.utils.StreamTools;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.text.TextUtils;
    import android.util.Log;
    import android.view.View;
    import android.widget.EditText;
    import android.widget.TextView;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
    protected static final int ERROR = 1;
    protected static final int SHOW_TEXT = 2;
    protected static final String TAG = "MainActivityHtml";
    private EditText et_path;
    private TextView tv_content;
    private Handler handler=new Handler(){
    
        @Override
        public void handleMessage(Message msg) {
            // TODO Auto-generated method stub
            switch (msg.what) {
            case ERROR:
                Toast.makeText(MainActivity.this, "获取网络资源失败", 1).show();
                break;
            case SHOW_TEXT:
                tv_content.setText((CharSequence) msg.obj);
                break;
    
            
            }
        }
        
    };
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            et_path=(EditText)findViewById(R.id.et_path);
            tv_content=(TextView)findViewById(R.id.tv_content);
        }
    
        public void click(View view){
            final String path=et_path.getText().toString().trim();
            if(TextUtils.isEmpty(path)){
                Toast.makeText(this, "网络地址不能为空", 1).show();
                return;
            }else{
                new Thread(new Runnable() {
                    
                    @Override
                    public void run() {
                        // TODO Auto-generated method stub
                        try {
                            URL url=new URL(path);
                            Log.i(TAG, "getResponseCode"+ url);
                            HttpURLConnection conn=(HttpURLConnection)url.openConnection();
                            Log.i(TAG, "getResponseCode");
    
                            conn.setRequestMethod("GET");
                             conn.setConnectTimeout(5000);
                             int code=conn.getResponseCode();
                             if(code==200){
                                 InputStream is=conn.getInputStream();  //得到服务器端返回来的输入流
                                 String result=StreamTools.ReadInputStream(is);
                                 Message msg=new Message();
                                msg.what=SHOW_TEXT;
                                msg.obj=result;
                                handler.sendMessage(msg);
                             
                             }else{
                                  Log.i(TAG, "code != 200");
                                 Message msg=new Message();
                                msg.what=ERROR;
                                handler.sendMessage(msg);
                             }
                            
                        } catch (Exception e) {
                            // TODO Auto-generated catch block
                             Log.i(TAG, "Exception");
                            e.printStackTrace();
                            Message msg=new Message();
                            msg.what=ERROR;
                            handler.sendMessage(msg);
                        }
                    }
                }).start();
            }
        }
    }

    五、StreamTools.java文件

    package com.example.htmlview.utils;
    
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.nio.ByteOrder;
    
    public class StreamTools {
    
        /**
         * 把输入流的数据转化为字符串
         * 
         * @param is
         *            输入流
         * @return 字符串
         */
        public static String ReadInputStream(InputStream is) {
            try {
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                int len = 0;
                byte[] buffer = new byte[1024];
                while ((len = is.read(buffer)) != -1) {
                    baos.write(buffer, 0, len);
                }
                is.close();
                baos.close();
                byte[] result = baos.toByteArray();
                return new String(result);
    
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                return "将输入流转化为字符串失败";
            }
        }
    }
  • 相关阅读:
    Leetcode Unique Binary Search Trees
    Leetcode Decode Ways
    Leetcode Range Sum Query 2D
    Leetcode Range Sum Query
    Leetcode Swap Nodes in Pairs
    Leetcode Rotate Image
    Leetcode Game of Life
    Leetcode Set Matrix Zeroes
    Leetcode Linked List Cycle II
    CF1321A
  • 原文地址:https://www.cnblogs.com/fuyanan/p/4081899.html
Copyright © 2011-2022 走看看