在学校里开始做毕业设计,之前学习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里加上网络访问权限
<!-- 加入访问网络的权限 -->
<uses-permission android:name="android.permission.INTERNET" />
改完之后,我迫不及待的跑起来,没有成功,抛出异常,debug连接失败
刚开始以为是网络问题,或者是我代买改错的问题,在群里问了几次,说是我没有加网络访问的权限,问了几次没有结果,自己便问度娘,给出了这样的说法
从 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的来跑一下,竟然成功了!!!
这样的问题,我也是醉了,各种版本的问题!
将源码奉上!下载