Android的接口回调的Demo实例

在平常开发中总是会涉及到回调这个词,作为一个新手,我觉得必须要好好了解下回调的机制,以及该怎么用。

想看机制的可以看看这一篇文章:http://www.2cto.com/kf/201502/377156.html

网上看到一句话,A类调用B类的某个方法b,然后B类又在某个时候返回来调用A类方法c,对于B来说,这个方法c就是回调函数。

我先举个很简单的例子,为了方便,类的名字也改为A和B:

先是接口interface的代码:

/**
 * 回调接口
 *
 */
public interface Callback {
	public void execute();
}

然后是B类的代码,通过传递接口参数,以便A类回调 

public class B {
	public void Test(Callback callback) {
		long oldtime = System.currentTimeMillis();
		callback.execute();//进行回调
		long newtime = System.currentTimeMillis();
		System.out.println("the time is " + (newtime - oldtime));

	}
}

最后是A类的

public class A extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		B b=new B();
		b.Test(new Callback(){

			@Override
			public void execute() {
				// TODO Auto-generated method stub
				System.out.println("实现回调");
			}});
	}

请忽略我是用Android环境写的纯Java代码调试,A类先实例化B类对象,然后调用B类的Test方法,B类的Test方法是有参数的,即接口对象,然后B类里callback的excute方法又要回到A类里面去调用excute方法,这个excute方法就是B的回调函数。一个回调过程就是这样了。

之后我另外写了一个Android上下载图片的接口回调事件,先来惯例放张程序运行结果图


还是先写接口:

/**
 * Bitmap回调接口
 *
 */
public interface BitmapCallback {
	public void getDownloadBitmap(Bitmap bitmap);
}

然后是B类:

/**
 * 图片下载类
 *
 */
public class ImageDownload {

	// 传递进接口参数,这样其他类引用的时候就能调用,这个方法在运行的时候又会回调MainActivity的方法
	public Bitmap getBitmap(final String path, final BitmapCallback callback) {

		final Handler handler = new Handler() {

			@Override
			public void handleMessage(Message msg) {
				// TODO Auto-generated method stub
				Bitmap bitmap = (Bitmap) msg.obj;
				callback.getDownloadBitmap(bitmap);
			}
		};
		// 图片下载进程
		new Thread() {
			public void run() {

				HttpClient httpClient = new DefaultHttpClient();
				HttpGet httpPost = new HttpGet(path);
				HttpResponse response = null;
				try {
					response = httpClient.execute(httpPost);

					if (response.getStatusLine().getStatusCode() == 200) {

						byte[] datas = EntityUtils.toByteArray(response
								.getEntity());
						Bitmap bitmap = BitmapFactory.decodeByteArray(datas, 0,
								datas.length);
						Message message = Message.obtain();
						message.obj = bitmap;
						handler.sendMessage(message);
					}

				} catch (ClientProtocolException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

			};

		}.start();

		return null;
	}
}

MainActivity(即A类)

public class MainActivity extends Activity {
	ImageView image = null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		image = (ImageView) findViewById(R.id.image);
		// 实例化ImageDownload类,并且传递参数调用getBitmap方法
		new ImageDownload().getBitmap(
				"http://2t.5068.com/uploads/allimg/150407/1-15040G45F6.jpg",
				new BitmapCallback() {

					@Override
					public void getDownloadBitmap(Bitmap bitmap) {
						// TODO Auto-generated method stub
						image.setImageBitmap(bitmap);
					}
				});
	}

总的过程也是和上个实例差不多,在MainActivity里面实例化ImageDownload对象,然后调用他的getBitmap()方法,并传递参数。然后在B类(ImageDownload)里callback.getDownloadBitmap()会回调A类里的getDownloadBitmmap()方法。一个回调下载图片的过程就成功了。对了,别忘了在AndroidManifest里面配置网络权限!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值