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

一、内容摘要


介绍了在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:HttpURLConnectionHttpClient,若使用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);
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值