【Android开发Wiki】进阶篇Performing Network Operations(一):连接到网络—Con

发布时间:2024-11-08

原文链接:

http:///training/basics/network-ops/connecting.html

这节课告诉你如何实现一个简单连接网络的应用程序,该课也解释了一些你应该遵循的实践方式,即使是创建最简单的网络连接应用。

注意:要执行这节课中描述的网络操作,你应用程序的manifest文件中必须包含以下权限:

选择一个HTTP客户端 Choose an HTTP Client

大多数网络连接的Android应用使用HTTP发送和接受数据,Android包括两个HTTP客户端:HttpURLConnection和Apache HttpClient,它们支持HTTPS,流上传和下载, 可配置的超时,IPv6以及连接池,在android系统版本为“姜饼”(android2.3)或者更高版本的应用程序中,推荐使用HttpURLConnection,更多关于这个主题的讨论,请查看博客Android HTTP 客户端

检查网络连接 Check the Network Connection

在你的应用试图连接到网络时,应该先检查网络连接是否可用,可以用getActiveNetworkInfo()和isConnected()方法执行检查。记住,设备(手机等设备)可能不在网络连接的范围内,或者用户禁用了Wi-Fi或者移动数据通道。更多关于此主题的讨论,请参看课程管理网络使用

在独立线程中执行网络连接 Perform Network Operations on a Separate Thread

网络操作涉及不可预知的延迟,为了防止不良的用户体验,通常的做法是从UI中独立出线程去执行网络连接操作。AsyncTask类提供了最简单的从UI线程中独立出一个新任务的方式。 更多关于此主题的讨论,请参看博客多线程性能

在下面的代码片段中,myClickHandler()方法执行了new DownloadWebpageTask().execute(stringUrl).DownloadWebpageTask类是AsyncTask的子类,DownloadWebpageTask实现了下面AsyncTask的方法: doInbackground()会执行downloadUrl()方法,downlaodUrl()方法将网页的URL地址作为参数,并获取和处理网页的内容,当它处理完这些操作,将会返回一个结果字符串。 onPostExecute()接受返回字符串并显示在UI上。

eoe移动开发者社区

http:///

13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30.//使用 AsyncTask创建一个独立于主 UI线程之外的任务.并使用 URL字符串创建一个 HttpUrlConnection对象。 31. 32.//一旦连接建立,AsyncTask则将网页内容作为一个 InputStream对象进行下载。//最终,InputStream对象会被转换为一个字符串对象,并被 AsyncTask的 onPost Execute方法显示在 UI上。 33. 34. 35. 36. 37. 38. 39. 40. 41.//参数来自 execute(),调用 params[0]得到 URL try{ return downloadUrl(urls[0]);} catch (IOException e){ return"无法获取网页,URL可能无效!Unable to retrieve web pag e. URL may be invalid."; 42.} private class DownloadWebpageText extends AsyncTask{@Override protected String doInBackground(String... urls){}} public void myClickHandler(View view){//从 UI的 text字段中得到 URL String stringUrl= urlText.getText().toString(); ConnectivityManager connMgr= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo= connMgr.getActiveNetworkInfo(); if (networkInfo != null&& networkInfo.isConnected()){ new DownloadWebpageText().execute(stringUrl);} else{ textView.setText("No network connection available.");//当用户点击按钮,调用 AsyncTask//在试图获取 URL时,确保有一个网络连接

该片段事件顺序如下:

1.当用户点击执行myClickHander()方法的按钮时,应用会将指定的URL传递给AsyncTask的子类DownloadWebpageTask。

2.AsyncTask的方法doInBackground()调用downloadUrl()。

3.downloadUrl()接收到作为字符串参数传递过来的URL,并用它创建一个URL对象。

4.使用URL对象创建HttpURLConnection对象。

5.一旦创建完HttpURLConnection对象,该对象将会以InputStream对象方式获取网页内容。

6.InputStream再通过readIt()方法将流转换为字符。

7.最后,AsyncTask的onPostExecute方法将字符显示在主activity的UI。

连接并下载数据 Connect and Download

Data

在你执行网络事务的线程中,你可以使用HttpURLConnection执行GET方法下载数据,在你调用了connect()方法后,你可以通过调用getInputStream()方法得到数据的InputStream对象。 在下面的代码片段中,doInBackground()方法调用了downloadUrl()方法。downloadUrl方法接收给过来的URL,并使用它通过HttpURLConnection对象连接到网络。一旦连接成功,应用将使用getInputStream()方法获得InputStream对象数据。

eoe移动开发者社区

http:///

4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31.}

//先显示获取到的前 500个字节//网页内容 int len= 500;

try{ URL url= new URL(myurl); HttpURLConnection conn= (HttpURLConnection) url.openConnection(); conn.setReadTimeout(10000/* milliseconds */); milliseconds */);

conn.setConnectTimeout(15000/* conn.setRequestMethod("GET"); conn.setDoInput(true);//开始查询 conn.connect();

int response= conn.getResponseCode(); Log.d(DEBUG_TAG,"The response is:"+ response); is= conn.getInputStream();

//将 InputStream转化为 string String contentAsString= readIt(is, len); return contentAsString;

//确保当 app用完 InputStream对象后关闭它。} finally{ if (is != null){ is.close();}}

复制代码

注意:getResponseCode()方法返回的是连接状态码,它是获取更多关于连接信息的有效方式。状态码200表示连接成功。

流对象转换为字符串对象 Convert the InputStream to a String

一个InputStream对象是一种可读的字节源(字节型数据源)。一旦你获得InputStream对象,通常是将其转码或者转换为目标对象数据类型。比如你下载了一个图像数据,你可能要将其转码然后像以下方式显示:

在上面提到的例子,其中InputStream对象代表的是一个网页的字符,以下是这个例子怎样将InputStream对象转换为String(字符对象),然后activity在Ui中显示该字符串。

文章来源:http:///page/Connecting_to_the_Network

【Android开发Wiki】进阶篇Performing Network Operations(一):连接到网络—Con.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219