青玄 发表于 2014-11-6 21:28:04

android学习笔记之访问互联网

本帖最后由 青玄 于 2014-11-6 21:29 编辑

访问互联网读取网页代码:
所需要的权限:
<uses-permission android:name="android.permission.INTERNET"/>

读取内容的类:package com.example.loadhtml_test.util;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;

public class Utils {

        public static String getInternetData(InputStream is)
        {
                try
                {
                        ByteArrayOutputStream baos = new ByteArrayOutputStream();   //字节数据输出流
                        byte[] buffer = new byte;   //字节数组
                        int len = -1;
                        while((len = is.read(buffer)) != -1)   //将输入流里面的内容读到字节数组里面
                        {
                                baos.write(buffer, 0, len);//再将字节数组里面的内容写到字节数组输出流里面
                        }
                        String content = new String(baos.toByteArray(), "GBK");//将这个内容转化为字符串并设置它的编码
                        if(content.contains("content=\"text/html;charset=utf-8\""))//如果编码为utf-8的话
                        {
                                return new String(baos.toByteArray(),"utf-8");   //就设置utf-8编码
                        }
                        return content;
                }catch(Exception e)
                {
                        e.printStackTrace();
                        return null;
                }
        }
}



本程序的主类:package com.example.loadhtml_test;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import com.example.loadhtml_test.util.Utils;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.text.TextUtils;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

      private TextView tv;
      private EditText et;
      private Handler handler;
      
      @Override
      protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                this.tv = (TextView) this.findViewById(R.id.ty);
                this.et = (EditText) this.findViewById(R.id.et);
                handler = new Handler(){

                        @Override
                        public void handleMessage(Message msg) {   //主线程中接收子线程发来的消息方法
                              // TODO Auto-generated method stub
                              if(msg.what == 1)
                              {
                                        tv.setText((String)msg.obj);
                              }else if(msg.what == 2)
                              {
                                        Toast.makeText(MainActivity.this, "网络链接有误", Toast.LENGTH_LONG).show();
                              }
                        }
                        
                };
      }
      
      public void showData(View v)   //点击事件的方法
      {
                final String path = et.getText().toString().trim();//获取网址路径
                if(!TextUtils.isEmpty(path))
                {
                        new Thread()   //开一个子线程
                        {
                              public void run()
                              {
                                        try
                                        {
                                                URL url = new URL(path);   //得到网址路径,并把它装在URL里面
                                                //通过url获得HttpURLConnection对象
                                                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                                                conn.setRequestMethod("GET");   //设置请求的方法
                                                conn.setConnectTimeout(5000);   //设置链接的时长
                                                conn.setRequestProperty("Accept","image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, */*");
                                                conn.setRequestProperty("User-Agent","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0)");
                                                int code = conn.getResponseCode();   //获得服务器发过来的返回码
                                                
                                                if(code == 200)   //如果是200的话
                                                {
                                                      final InputStream is = conn.getInputStream();   //从这个链接对象里面获取输入流
                                                      final String content = Utils.getInternetData(is);//调用这个方法获取网页的代码
                                                      if(content != null)
                                                      {
                                                                Message msg = Message.obtain();   //得到消息对象
                                                                msg.what = 1;   //设置消息
                                                                msg.obj = content;//给消息一个对象传过去
                                                                handler.sendMessage(msg);   //发送消息
                                                      }else
                                                      {
                                                                Message msg = Message.obtain();
                                                                msg.what = 2;
                                                                handler.sendMessage(msg);
                                                      }
                                                }
                                        }catch(Exception e)
                                        {
                                                e.printStackTrace();
                                        }
                              }
                        }.start();
                }else
                {
                        Toast.makeText(this, "获取内容失败", Toast.LENGTH_LONG).show();
                }
      }
}
3.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=".MainActivity" >

<ScrollView
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:layout_weight="20"
   >
   <TextView
         android:id="@+id/ty"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         />
</ScrollView>   
<EditText
   android:id="@+id/et"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   />
<Button
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:onClick="showData"
   android:text="获得网页内容"
   />

</LinearLayout>





页: [1]
查看完整版本: android学习笔记之访问互联网