Android客户端制作之连接URL

    在学校里开始做毕业设计,之前学习android花了十几天的时间,虽然时间很短,但是android基础都过了一遍,当时使用百度地图API制作了一个APP,自己感觉还比较的满意,到现在四个月,就没有碰android,忘的差不多了,所以毕设可以说是边学边做吧!

    首先制作这样的功能,访问学校首页并将首页里四大模块的新闻解析出来,并先是在手机上。所以,开始要能成功的连接上URL。

照着互联网上的博客,下了一个Dmoe,简单的改了一下,代码如下:

首先是一个方法,使用HTTPURLConnection连接url并获取网页的html代码。

/**
	 * @param urlStr
	 * @return
	 * @throws Exception
	 */
	public static String doGet(String urlStr) throws Exception  
    {  
        StringBuffer sb = new StringBuffer();  
        try  
        {  
            URL url = new URL(urlStr);  
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
            conn.setRequestMethod("GET");  
            conn.setConnectTimeout(5000);  
            conn.setDoInput(true);  
            conn.setDoOutput(true);  
  
            if (conn.getResponseCode() == 200)  
            {  
                InputStream is = conn.getInputStream();  
                int len = 0;  
                byte[] buf = new byte[1024];  
  
                while ((len = is.read(buf)) != -1)  
                {  
                    sb.append(new String(buf, 0, len, "UTF-8"));  
                }  
  
                is.close();  
            } else  
            {  
                throw new Exception("访问网络失败!");  
            }  
  
        } catch (Exception e)  
        {  
            throw new Exception("访问网络失败!");  
        }  
        return sb.toString();  
    }  
然后是load()方法

	protected void load() throws Exception {
		
		String htmlString = doGet("http://www.chzu.edu.cn/");
		doc = Jsoup.parse(htmlString);
		Intent intent = new Intent();
		intent.putExtra("content", htmlString);
		intent.setClass(MainActivity.this, HtmlActivity.class);
		this.startActivity(intent);		
	}
再来是按钮的监听事件

	findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				try {
					load();
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		});
跳转后的页面显示HTML源码

textView = (TextView)findViewById(R.id.content);
		Intent intent = getIntent();
		textView.setText(intent.getStringExtra("content"));

最后别忘了在AndroidMainFest.xml里加上网络访问权限


    
改完之后,我迫不及待的跑起来,没有成功,抛出异常,debug连接失败

Android客户端制作之连接URL_第1张图片Android客户端制作之连接URL_第2张图片

刚开始以为是网络问题,或者是我代买改错的问题,在群里问了几次,说是我没有加网络访问的权限,问了几次没有结果,自己便问度娘,给出了这样的说法

从 Android 2.3 开始提供了一个新的类 StrictMode,该类可以用于捕捉发生在应用程序主线程中耗时的磁盘、网络访问或函数调用,可以帮助开发者改进程序,使主线程处理 UI 和动画在磁盘读写和网络操作时变得更平滑,避免主线程被阻塞。

在onCreate的方法里加上下面代码

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork() // 这里可以替换为detectAll() 就包括了磁盘读写和网络I/O
.penaltyLog() //打印logcat,当然也可以定位到dropbox,通过文件保存相应的log
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects() //探测SQLite数据库操作
.penaltyLog() //打印logcat
.penaltyDeath()
.build()); 
我抱着试试看的心态,加上之后,也没有成功,我彻底崩溃了!闲着无聊,看着eclipse的属性,发现我用的是jdk1.7,我再想是不是版本的问题,我便装了个1.6的,用1.6的来跑一下,竟然成功了!!!

这样的问题,我也是醉了,各种版本的问题!

将源码奉上!下载

你可能感兴趣的:(Android)