要本身的程序链接网络首先要在清单文件中设置权限
android链接网络有httpUrlconnection和httpClient两种方法文档建议使用HttpUrlConnection方法
清单文件中的设置
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
程序链接网络须要的步骤:
一、检查手机正在活动的网络:
二、继承AsynTask开另外一个线程处理下载任务:
1)处理下载任务首先要构建一个url;
2)从url获取HttpUrlConnection
3)设置读取超时时间、链接超时时间、请求方式以及进行链接
4)获取服务器返回码(200b表示成功)
5)获取成功后处理服务器传来的字节流转成程序要使用的类型
实现程序链接网络下载文件的小Demo ,这里面用到AsynTask类,它是一个异步类开启另外一个线程执行下载任务这种耗时任务,与直接继承Thread方法和实现Runnable借口相比这个方法与UI主线程的通讯更加方便
这个抽象类须要:
实现doInBackground这个抽象方法。在这个方法之中处理耗时任务。
另外还有几个常常须要重写的方法:
一、onPostExecute 这个方法用来更新UI
二、onProgressUpdate(Progress... values) 这个方法用来处理耗时任务的处理进度 ,主线程调用此方法显示处理进度
注意事项
使用这个类时只能被执行一次,它的实例只能在主线程中new出来,在主线程中执行execute,主线程不能调用asynTask中的doInBackground 、 onPostExecute、 onProgressUpdate方法
/**
* 在清单文件中获取权限
* 一、检查网络链接是否通畅,调用ConnectivityManager中的getActiveNetWorkInfo得到当钱活动网络
* 二、继承AsynTask类完成下载线程的处理任务
* 1)重写doInBackground方法 处理下载任务
* 2)重写onPostExecute方法 将下载的数据传给UI 更新
*
* 三、处理下载任务时 首先new一个URL 根据url得到httpUrlconnection
* 而后设置链接超时 读取超时以及请求方式和doinput
* 而后接受服务器返回码(200表示接收成功)
* 最后处理接受的字节流
* */
public class DL_Pic_MainActivity extends Activity {
MyTask myTask=null;
ImageView imageView;
boolean flag =true;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dl__pic__main);
//注册ImageView组件接受下载的图片
imageView = (ImageView)findViewById(R.id.imageView1);
//接受网络链接服务
ConnectivityManager connManager =(ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
//获取正在工做的可用网络
NetworkInfo networkInfo =connManager.getActiveNetworkInfo();
if(networkInfo!=null&&networkInfo.isConnected())
{
//若是有可用的网络 开一个线程下载
myTask = new MyTask();
}else{
Toast.makeText(getApplicationContext(), "无网络链接,请检查网络链接", Toast.LENGTH_SHORT).show();
}
}
//线程下载类
//异步类 此类有
class MyTask extends AsyncTask<String, Void, Drawable>{
//执行下载
@Override
protected Drawable doInBackground(String... params) {
// TODO Auto-generated method stub
Drawable bitmap=null;
try {
bitmap=downloadUrl(params[0]);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return bitmap ;
}
//将下载的数据传给ui更新ui
@Override
protected void onPostExecute(Drawable result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
imageView.setImageDrawable(result);
}
}
//下载方法
private Drawable downloadUrl(String url) throws Exception{
Drawable bitmap=null;
//构建url
URL myUrl = new URL(url);
//根据url获取HttpURLConnection并生设置读取超时时间、链接超时间、接受请求方式doinput
HttpURLConnection httpUrlConn =(HttpURLConnection) myUrl.openConnection();
httpUrlConn.setReadTimeout(1000);
httpUrlConn.setConnectTimeout(1500);
httpUrlConn.setRequestMethod("GET");
httpUrlConn.setDoInput(true);
httpUrlConn.connect();
if(httpUrlConn.getResponseCode()==200){
//获取下载得字节流
InputStream is=httpUrlConn.getInputStream();
//将字节流转换成能使用的Drawable类型
bitmap = new BitmapDrawable(is);
}else{
Toast.makeText(getApplicationContext(), "服务器忙", Toast.LENGTH_SHORT).show();
}
return bitmap;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_dl__pic__main, menu);
return true;
}
//点击button事件执行下载,这个点击事件方法不会控制使execute方法执行一次所以用了一个标记............
public void btnOnclick(View view){
if(flag){
myTask.execute("http://www.google.com.hk/logos/2012/clara_schuman-2012-hp.jpg");
flag=false;
}
}
}