Android学习笔记:网络编程-基础篇

来源:互联网 发布:观一叶而知秋全文 编辑:程序博客网 时间:2024/05/28 11:28

一、内容摘要


介绍了在Android中编写网络应用的基本方法。


二、目录


1、添加权限
2、选择HTTP Client
3、检查网络连接
4、在子线程中进行网络操作
5、连接并下载数据
6、把InputStream转换为String



三、主要内容


1、添加权限


mainifest中需要添加以下两个权限:
(1)允许程序打开网络套接字
<uses-permissionandroid:name="android.permission.INTERNET"/>
(2)允许程序获取网络信息
<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/>



2、选择HTTP Clients


许多Android网络应用都通过HTTP传输数据,Android包括两种HTTPclients:HttpURLConnection和HttpClient,若使用Android2.3或以上版本的API,建议选择前者.

选择依据:HttpClient的子类拥有大量API,由于过于臃肿带来的兼容性问题,Android开发团队对它的维护并不活跃。相比之下,HttpURLConnection拥有轻量级API,在减少网络流量、速度以及省电方面都有较大改善,并且Android开发团队正致力于它的不断完善中。



3、检查网络连接


在连接到网络之前,应该通过getActiveNetworkInfo()isConnected()检查网络的可用性。

示例代码:

public void myClickHandler(View view) {    ...    ConnectivityManager connMgr = (ConnectivityManager)        getSystemService(Context.CONNECTIVITY_SERVICE);    NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();    if (networkInfo != null && networkInfo.isConnected()) {        // 网络操作    } else {        // 提示错误    }    ...}



4、在子线程中进行网络操作


网络操作会有延迟,不应该在主线程(UI线程)中操作。推荐使用AsyncTask类,该类可以很方便实现在子线程中进行网络操作,并且把结果返回到主线程,免除了操作thread和handle的麻烦。



5、连接并且下载数据


通过HttpURLConnection可以发送“GET”请求,在调用connect()之后,可以调用getInputStream()获取InputStream
示例:(downloadUrl方法在子线程中执行)

private String downloadUrl(String myurl) throws IOException {    InputStream is = null;    //展示网页内容的前500个字符    int len = 500;           try {        URL url = new URL(myurl);        HttpURLConnection conn = (HttpURLConnection) url.openConnection();        conn.setReadTimeout(10000 /* 毫秒*/);        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;           // 确保程序结束后关闭InputStream    } finally {        if (is != null) {            is.close();        }    }}



6、把InputStream转换成String


得到InputStream后,应该把它解码为目标数据类型,如Bitmap:
示例:

InputStream is = null;...Bitmap bitmap = BitmapFactory.decodeStream(is);ImageView imageView = (ImageView) findViewById(R.id.image_view);imageView.setImageBitmap(bitmap);

补充上面示例中readIt方法的实现:

public String readIt(InputStream stream, int len) throws IOException, UnsupportedEncodingException {    Reader reader = null;    reader = new InputStreamReader(stream, "UTF-8");            char[] buffer = new char[len];    reader.read(buffer);    return new String(buffer);}






原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小孩拼音太差了怎么办 我生了爸爸孩子怎么办 三岁宝宝特别犟怎么办 孩子说老师打他怎么办 孩子在幼儿园不合群怎么办 孩与厌学不想学怎么办 1岁宝宝太活泼怎么办 3岁宝宝不爱看书怎么办 6岁不好好吃饭怎么办 二岁宝宝不吃饭怎么办 2岁半宝宝不爱吃饭怎么办 宝宝一岁了不爱吃饭怎么办 一岁多的宝宝不爱吃饭怎么办 小孩不吃饭还吐怎么办 一岁婴儿不吃饭怎么办 写字久了肩膀疼怎么办 6岁儿童不写字怎么办 孩子字写得丑怎么办 6岁儿童怕写字怎么办 高三学生上课困怎么办 高三学生压力大怎么办 数学会做的做错怎么办 脑子很笨反应慢怎么办 好学生考砸了怎么办 孩子写作业范愁怎么办 对粗心的孩子该怎么办 做计算题总出错怎么办 孩子字写得不好怎么办 3岁宝宝数学不好怎么办 十个月的宝宝拉肚子怎么办 刚生的宝宝拉肚子怎么办 我给兔子洗澡了怎么办 刚生的小狗脐带怎么办 宠物兔不想养了怎么办 兔子被打不动了怎么办 ai画板大小会变怎么办 和小孩生肖相冲怎么办 小孩和父母相冲怎么办 4岁宝宝抵抗力差怎么办 5岁儿童抵抗力差怎么办 格力小狗腿歪了怎么办