您的位置:首页 > 理论基础 > 计算机网络

安卓:handler下载网络图片(附带有进度条和网络连接判断的APP)

2015-09-22 21:35 921 查看
点击下载按钮后的结果:



注意: 加网络权限

逻辑代码文件:

<span style="font-size:18px;">package com.example.day18_handlertest;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.Menu;
import android.view.View;
import android.widget.ImageView;

public class MainActivity extends Activity {

ImageView iv;
//Button bt;
Bitmap bm ;
String path="http://www.guaiwei.com/uploads/allimg/150326/28-150326141503.png";
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Bitmap x = (Bitmap) msg.obj;
iv.setImageBitmap(bm);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv=(ImageView) findViewById(R.id.iv);
}

public void click(View v)
{
new Thread(){
public void run() {
//创建请求客户端
HttpClient hclient=new DefaultHttpClient();
//请求
HttpGet request=new HttpGet(path);
//字节输出流存放要下载的文件
ByteArrayOutputStream bo=new ByteArrayOutputStream();
try
{
//得到客户端执行请求的结果
HttpResponse response=hclient.execute(request);
//请求成功执行的操作
if(response.getStatusLine().getStatusCode()==200)
{
//得到请求的实体内容
InputStream in = response.getEntity().getContent();
byte b[]=new byte[1024];
int count=0;
while((count=in.read(b))!=-1)
{
bo.write(b,0,count);
bo.flush();
}
}
bm= BitmapFactory.decodeByteArray(bo.toByteArray(), 0, bo.toByteArray().length);

}
catch (Exception e)
{
e.printStackTrace();
}
Message msg=handler.obtainMessage();
msg.obj=bm;
handler.sendMessage(msg);
}
}.start();
}

}

</span>


布局文件:

<span style="font-size:18px;"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<ImageView
android:id="@+id/iv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/bt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="下载图片"
android:layout_below="@+id/iv"
android:gravity="center"
android:onClick="click"/>

</RelativeLayout>
</span>


项目2:

带有进度条和网络连接状态判断的handler下载图片APP:



加权限:

<uses-permission android:name="android.permission.INTERNET"/>

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

请求网络工具类:

<span style="font-size:18px;">package com.utils;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;

public class HttpUtil {

//判断是否有网络
public static boolean isConn(Context context)
{
//得到网络的管理者
ConnectivityManager manager=(ConnectivityManager) context.getSystemService(context.CONNECTIVITY_SERVICE);
NetworkInfo info=manager.getActiveNetworkInfo();
if(info!=null)
{
return true;
}
else
{
return false;
}
}
public static byte[] getData(String path)
{
//创建请求客户端
HttpClient client=new DefaultHttpClient();
//创建请求对象
HttpGet hg=new HttpGet(path);
ByteArrayOutputStream bo=new ByteArrayOutputStream();
try
{
//客户端执行请求
HttpResponse hr=client.execute(hg);
if(hr.getStatusLine().getStatusCode()==200)
{
InputStream in = hr.getEntity().getContent();
byte b[]=new byte[1024];
int count=0;
while((count=in.read(b))!=-1)
{
bo.write(b, 0, count);
bo.flush();
}
}
return bo.toByteArray();
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
}
</span>


逻辑代码文件:

<span style="font-size:18px;">package com.example.day18_handleimg;

import android.app.Activity;
import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;

import com.utils.HttpUtil;

public class MainActivity extends Activity {

ImageView iv;
static final int ok=1;
static final int error=ok+1;
ProgressDialog pdialog;
String path="http://www.guaiwei.com/uploads/allimg/150326/28-150326141503.png";
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch(msg.what)
{
case ok:
Bitmap c=(Bitmap) msg.obj;
iv.setImageBitmap(c);
break;
case error:
String str=(String) msg.obj;
Toast.makeText(MainActivity.this, str, 0).show();
break;
}

pdialog.dismiss();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv=(ImageView) findViewById(R.id.iv);
pdialog=new ProgressDialog(MainActivity.this);
pdialog.setMessage("正在下载");
}
public void click(View v)
{
pdialog.show();
new Thread(){
public void run() {
if(HttpUtil.isConn(MainActivity.this))
{//有网络
byte b[]=HttpUtil.getData(path);
Bitmap bm=BitmapFactory.decodeByteArray(b, 0, b.length);
Message msg=handler.obtainMessage();
msg.obj=bm;
msg.what=ok;
handler.sendMessage(msg);
}
else
{
//无网络
Message msg=handler.obtainMessage();
msg.obj="网络异常,请检查网络";
msg.what=error;
handler.sendMessage(msg);
}
};
}.start();
}

}
</span>


布局文件:

<span style="font-size:18px;"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<ImageView
android:id="@+id/iv"
android:layout_width="match_parent"
android:layout_height="200dp"
/>
<Button
android:id="@+id/bt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="下载图片"
android:onClick="click"
android:layout_below="@+id/iv"/>

</RelativeLayout>
</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: