我想在下面的班级中添加听众:
class BitmapDisplay implements Runnable
{
IAsyncFetchListener fetchListener = null;
public void setListener(IAsyncFetchListener listener) {
this.fetchListener = listener;
}
Bitmap bitmap;
BitmapToLoad bitmapToLoad;
public BitmapDisplay(Bitmap b, BitmapToLoad p){bitmap=b;bitmapToLoad=p;}
public void run()
{
if(bitmap!=null)
returnbitmap=bitmap;
else
returnbitmap=BitmapFactory.decodeResource(context.getResources(), stub_id);
this.fetchListener.onComplete(returnbitmap);
}
}
}
但是我的听众不会在eclipse中工作
imageLoader.DisplayBitmap("").setListener(new IAsyncFetchListener() {
@Override
public void onComplete(Bitmap bitmap) {
photoView.setImageBitmap(bitmap);
}
});
我在setListener中遇到错误:
方法setListener(new IAsyncFetchListener(){})未定义 类型Bitmap“如何解决?
答案 0 :(得分:0)
因为当您执行imageLoader.DisplayBitmap("")
时,方法DisplayBitmap("")
会返回Bitmap
。
您正在将方法DisplayBitmap
与对象BitmapDisplay
混合。
但你可以这样做:
BitmapDisplay bd=new BitmapDisplay(bmp, bitmapToLoad);
bd.setListener(new IAsyncFetchListener() {
@Override
public void onComplete(Bitmap bitmap) {
photoView.setImageBitmap(bitmap);
}
}
);
答案 1 :(得分:0)
将您的代码更改为以下内容:
DisplayBitmap功能
public Void DisplayBitmap(String url,IAsyncFetchListener listener)
{
Bitmap bitmap=memoryCache.get(url);
if(bitmap!=null)
listener.onComplete(bitmap);
else
{
queueBitmap(url,listener);
listener.onComplete(BitmapFactory.decodeResource(context.getResources(), stub_id));
}
}
queueBitmap功能
private void queueBitmap(String url,IAsyncFetchListener listener)
{
BitmapToLoad p=new BitmapToLoad(url);
executorService.submit(new BitmapsLoader(p,listener));
}
BitmapsLoader构造函数
IAsyncFetchListener listener;
BitmapsLoader(BitmapToLoad bitmapToLoad,IAsyncFetchListener listener){
this.bitmapToLoad=bitmapToLoad;
this.listener=listener;
}
运行方法
@Override
public void run() {
try{
Bitmap bmp=getBitmap(bitmapToLoad.url);
memoryCache.put(bitmapToLoad.url, bmp);
BitmapDisplay bd=new BitmapDisplay(bmp, bitmapToLoad);
bd.setListener(listener);
handler.post(bd);
}catch(Throwable th){
th.printStackTrace();
}
}
最后称之为:
imageLoader.DisplayBitmap("",new IAsyncFetchListener() {
@Override
public void onComplete(Bitmap bitmap) {
photoView.setImageBitmap(bitmap);
}
});