使用重写方法之外的值会导致null

时间:2016-10-10 02:33:58

标签: java android interface

在我的Post类中,在saveBitmap方法中,我使用我界面中的方法转到URL并将图像检索到位图然后返回它。它工作正常,它确实检索位图,但如果我尝试在接口方法之外使用位图[0](在图1中),它说它为空。

因此,每当我必须处理检索到的值时,它必须在方法内部,并且由于某种原因它不会让我把它拿出来。这之后的另一个问题(我认为可能会被束缚)是我需要两次覆盖onDownloadComplete方法。在我的Post课程的最底部,您可以看到它被空体重新覆盖。我就是这样,我的Post类的顶行,我实现了onDownloadImageListener,并没有红线。

我不确定如何解决这个问题,我希望能够在侦听器方法之外检索值。

发布课程:

public class Post extends Fragment implements OnDownloadImageListener {
...
private void saveBitmap(String userName, String key){
    DownloadImage downloadImage = new DownloadImage();
    final Bitmap[] bitmap = new Bitmap[1];
    final String url = "https://graph.facebook.com/" + key + "/picture?type=large";

    downloadImage.execute(url);
    downloadImage.setOnDownloadImageListener(new OnDownloadImageListener() {
        @Override
        public void onDownloadComplete(Bitmap bmap) {
            bitmap[0] = bmap;
        }
    });
    //**FIGURE 1**
}

@Override
public void onDownloadComplete(Bitmap bmap) { //I need this otherwise it gives me an error on the top line where I have "implements OnDownloadImageListener"

DownloadImage类:

public class DownloadImage extends AsyncTask<String, Void, Bitmap> {

private OnDownloadImageListener listener;

@Override
protected void onPreExecute() {
    super.onPreExecute();
}

@Override
protected Bitmap doInBackground(String... URL) {

    String imageURL = URL[0];

    Bitmap bitmap = null;
    try {
        // Download Image from URL
        InputStream input = new java.net.URL(imageURL).openStream();
        // Decode Bitmap
        bitmap = BitmapFactory.decodeStream(input);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return bitmap;
}

@Override
protected void onPostExecute(Bitmap result) {
    if(listener!=null){
        listener.onDownloadComplete(result);
    }
}

public void setOnDownloadImageListener(OnDownloadImageListener listener){
    this.listener=listener;
}
}

最后,我的界面/听众:

public interface OnDownloadImageListener {
     void onDownloadComplete(Bitmap bmap);
}

1 个答案:

答案 0 :(得分:1)

您应该将此(引用实现OnDownloadImageListener接口的类Post)传入DownloadImage对象downloadImage的setOnDownloadImageListener方法。

config.yml