Android客户端制作之连接URL
16lz
2021-01-23
在学校里开始做毕业设计,之前学习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() {@Overridepublic void onClick(View v) {try {load();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}});
跳转后的页面显示HTML源码 textView = (TextView)findViewById(R.id.content);Intent intent = getIntent();textView.setText(intent.getStringExtra("content"));
最后别忘了在AndroidMainFest.xml里加上网络访问权限
改完之后,我迫不及待的跑起来,没有成功,抛出异常,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的来跑一下,竟然成功了!!! 这样的问题,我也是醉了,各种版本的问题!
将源码奉上!下载
更多相关文章
- Android 手表设计规范(来源于网络)
- Android判断设备网络连接状态,并判断连接方式
- Android监听网络的变化
- Android与.Net交互模拟用户屏幕操作添加APN和网络4G/3G切换
- 检测android的网络链接状态
- android网络连接httpGet,遇到java.net.UnknownHostException: Ho
- Android当中显示网络图片
- Android MediaPlayer使用之网络访问异常