显示找不到get()方法

时间:2017-06-18 20:17:46

标签: android android-download-manager android-wallpaper

我试图通过从互联网下载图片来设置壁纸,但它显示了" get()方法"找不到。 我的代码: 在此代码中,wall_set是一个按钮的名称

wall_set.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Bitmap result=Glide.with(getApplicationContext())
                            .load("http://www.sport-stickers.com/images/2013/CARTOON%20IRON%20ONS/Doraemon/Doraemon%20Iron%20ons%20(Wall%20Stickers)%20N3715.jpg").get();


                    WallpaperManager wallpaperManager = WallpaperManager.getInstance(getApplicationContext());
                    try {
                        wallpaperManager.setBitmap(result);
                    } catch (IOException ex) {
                        ex.printStackTrace();
                    }
                }
            }
    );

2 个答案:

答案 0 :(得分:1)

更改代码的这一部分:

Bitmap result=Glide.with(getApplicationContext())
                        .load("http://www.sport-stickers.com/images/2013/CARTOON%20IRON%20ONS/Doraemon/Doraemon%20Iron%20ons%20(Wall%20Stickers)%20N3715.jpg").asBitmap().get();

添加" asBitmap"

you might need to add  
asBitmap().into(20, 20). // Width and height

以下

答案 1 :(得分:0)

如果你遵循Glide样本用法,那么get()方法就属于java.util.concurrent.Future对象。未来的类定义由官方文档给出如下。

  

public interface Future<V>未来代表了一个结果   异步计算。提供方法来检查是否   计算完成,等待其完成,并检索   计算的结果。结果只能使用   计算完成时获取方法,必要时阻塞   直到它准备好了。取消由取消方法执行。   提供了其他方法来确定任务是否完成   通常或被取消。计算完成后,即可   计算无法取消。如果您想使用Future   为了取消可行性而不提供可用的结果,你可以   声明Future的形式类型,并返回null作为结果   基本任务。

     

样本用法(请注意,以下类都已编写。)

interface ArchiveSearcher { String search(String target); }
 class App {
   ExecutorService executor = ...
   ArchiveSearcher searcher = ...
   void showSearch(final String target)
       throws InterruptedException {
     Future<String> future
       = executor.submit(new Callable<String>() {
         public String call() {
             return searcher.search(target);
         }});
     displayOtherThings(); // do other things while searching
     try {
       displayText(future.get()); // use future
     } catch (ExecutionException ex) { cleanup(); return; }
   }
 }

让我们一步一步看看会发生什么:

Bitmap theBitmap = Glide. 
        with(this). //in Glide class and returns RequestManager
        load(image_url). // in RequestManager and returns RequestBuilder<Drawable>
        asBitmap(). //in RequestBuilder and returns RequestBuilder<Bitmap>
        submit(). // in RequestBuilder and returns FutureTarget<TranscodeType> which extends Future<>
        get(); // this belongs to Future object which is the result of async computation

public static RequestManager with(Context context) {
    return getRetriever(context).get(context);
  }

public RequestBuilder<Drawable> load(@Nullable Object model) {
    return asDrawable().load(model);
  }


  public RequestBuilder<Bitmap> asBitmap() {
    return as(Bitmap.class).transition(new GenericTransitionOptions<Bitmap>())
            .apply(DECODE_TYPE_BITMAP);
  }

public FutureTarget<TranscodeType> submit() {
    return submit(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL);
  }


public interface FutureTarget<R> extends Future<R>, Target<R> {
}

但更合适和安全的解决方案是使用回调

Glide
    .with(this)
    .load(image_url)
    .asBitmap()
    .into(new SimpleTarget<Bitmap>(100,100) {
        @Override
        public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) {
            //resource is the resulting bitmap
        }
    });