android——网络操作(一)连接网络
2014-04-28 22:26
197 查看
连接网络
一,包含许可
<uses-permissionandroid:name="android.permission.INTERNET"/>
<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/>
二,选择HTTPClient
Android包含了Android'sHTTPClients.
三,检查网络连接
使用前应该检查一下网络的状态,以便执行相应的操作。用getActiveNetworkInfo()和
四,在独立的线程上进行网络操作
网络操作可能带来无法预测的延时,所以应该在独立于UI的线程中进行。MultithreadingForPerformance。
五,连接和下载数据
在实现网络传输的进程中,可以用
上面一段代码中,
六,将InputStream转为String类型
本例中,
一,包含许可
<uses-permissionandroid:name="android.permission.INTERNET"/>
<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/>
二,选择HTTPClient
Android包含了
和ApacheHttpURLConnection
两种HTTPclients,推荐使用前者。详见HttpClient
三,检查网络连接
使用前应该检查一下网络的状态,以便执行相应的操作。用
来检查状态。isConnected()
publicvoidmyClickHandler(Viewview){
...
ConnectivityManagerconnMgr=(ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfonetworkInfo=connMgr.getActiveNetworkInfo();
if(networkInfo!=null&&networkInfo.isConnected()){
//fetchdata}else{//displayerror}
...
}
四,在独立的线程上进行网络操作
网络操作可能带来无法预测的延时,所以应该在独立于UI的线程中进行。
类提供了简单的方法。详见AsyncTask
publicclassHttpExampleActivityextendsActivity{
privatestaticfinalStringDEBUG_TAG="HttpExample";
privateEditTexturlText;
privateTextViewtextView;
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
urlText=(EditText)findViewById(R.id.myUrl);
textView=(TextView)findViewById(R.id.myText);
}
//当用户点击按钮,调用AsyncTask。
//在获取URL之前,先检查网络状态。
publicvoidmyClickHandler(Viewview){
//GetstheURLfromtheUI'stextfield.
StringstringUrl=urlText.getText().toString();
ConnectivityManagerconnMgr=(ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfonetworkInfo=connMgr.getActiveNetworkInfo();
if(networkInfo!=null&&networkInfo.isConnected()){
newDownloadWebpageText().execute(stringUrl);
}else{
textView.setText("Nonetworkconnectionavailable.");
}
}
//用AsyncTask创建一个独立于UI的进程任务。
//任务需要一个URLstring用于创建HttpUrlConnection.Oncetheconnection
//一旦连接建立,AsyncTask将网页的内容作为一个InputStream类型下载。
//最后,将InputStream转化成string类型,并予以显示。
privateclassDownloadWebpageTextextendsAsyncTask{
@Override
protectedStringdoInBackground(String...urls){
//paramscomesfromtheexecute()call:params[0]istheurl.
try{
returndownloadUrl(urls[0]);
}catch(IOExceptione){
return"Unabletoretrievewebpage.URLmaybeinvalid.";
}
}
//onPostExecute显示AsyncTask的结果。
@Override
protectedvoidonPostExecute(Stringresult){
textView.setText(result);
}
}
...
}
五,连接和下载数据
在实现网络传输的进程中,可以用
执行HttpURLConnection
GET方法并下载数据。在调用了
connect()方法之后,可以调用
getInputStream()来获得
类型的数据。InputStream
上面一段代码中,
方法调用了doInBackground()
downloadUrl()方法。而后者接受一个URL用于通过
连接网络,一旦网络连接成功,可以调用HttpURLConnection
getInputStream()来获得
类型的数据。InputStream
//接受一个URL,建立HttpUrlConnection连接,并获取网页内容InputStream,并将其转换为
//string类型返回。
privateStringdownloadUrl(Stringmyurl)throwsIOException{
InputStreamis=null;
//只显示内容的前500个字
intlen=500;
try{
URLurl=newURL(myurl);
HttpURLConnectionconn=(HttpURLConnection)url.openConnection();
conn.setReadTimeout(10000/*milliseconds*/);
conn.setConnectTimeout(15000/*milliseconds*/);
conn.setRequestMethod("GET");
conn.setDoInput(true);
//Startsthequery
conn.connect();
intresponse=conn.getResponseCode();
Log.d(DEBUG_TAG,"Theresponseis:"+response);
is=conn.getInputStream();
//ConverttheInputStreamintoastring
StringcontentAsString=readIt(is,len);
returncontentAsString;
//保证InputStream在应用结束时被关闭。
}finally{
if(is!=null){
is.close();
}
}
}
六,将InputStream转为String类型
类型可以按字节读取,通常在获得之后将其转换为目标类型的数据。比如,如果你需要的是Image类型的数据,你可以这样显示:InputStream
InputStreamis=null;
...
Bitmapbitmap=BitmapFactory.decodeStream(is);
ImageViewimageView=(ImageView)findViewById(R.id.image_view);
imageView.setImageBitmap(bitmap);
本例中,
代表的是网页中的text数据,以下是如何将InputStream
转换成string类型的数据用于UI中的显示:InputStream
//ReadsanInputStreamandconvertsittoaString.
publicStringreadIt(InputStreamstream,intlen)throwsIOException,UnsupportedEncodingException{
Readerreader=null;
reader=newInputStreamReader(stream,"UTF-8");
char[]buffer=newchar[len];
reader.read(buffer);
returnnewString(buffer);
}
相关文章推荐
- android 网络连接操作
- android 子线程进行网络连接等操作-AsyncTask方法
- Android Training - 网络操作(1) - 连接网络
- 【Android Training - Connectivity】基本网络操作 [ Lesson 1 - 如何连接到网络的经典示例 ]
- Android官方开发文档Training系列课程中文版:网络操作之网络连接
- android 判断网络连接、sim卡信息以及ping操作是否网络连接正常
- android开发训练——网络操作(一)连接网络
- Android基础 —— 网络连接操作NetWork
- android ConnectivityManager主要管理和网络连接相关的操作
- 【Android Training - Connectivity】基本网络操作 [ Lesson 2 - 管理网络连接的常用方法 ]
- Android编程获取网络连接状态(3G/Wifi)及调用网络配置界面
- mars android开发之三:WIFI网络操作
- Android网络连接相关广播
- android之ConnectivityManager简介,网络连接状态
- android adb网络连接方法
- Android之使用HttpURLConnection连接网络
- win7设置无线连接为家庭网络操作步骤
- android 监听网络连接状态的改变
- Android网络连接判断与处理
- Android进阶练习-执行网络操作