鱼C论坛

 找回密码
 立即注册
查看: 1910|回复: 0

android学习笔记之访问互联网

[复制链接]
发表于 2014-11-6 21:28:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 青玄 于 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[1024];   //字节数组
                        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>
QQ截图20141106212635.png



评分

参与人数 1荣誉 +5 收起 理由
拈花小仙 + 5 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-15 16:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表