【问题标题】:In Java, is there such a thing as a "do when" loop? [duplicate]在 Java 中,是否存在“do when”循环之类的东西? [复制]
【发布时间】:2016-06-03 15:10:29
【问题描述】:

好的,这可能是一个菜鸟问题,但我找不到任何可以帮助我的东西。我在这个类中将 ImageView 上的位图作为异步任务加载:

class MyNetworkTask extends AsyncTask<URL, Void, Bitmap> {

ImageView tIV;

public MyNetworkTask(ImageView iv){
    tIV = iv;
}

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

    Bitmap networkBitmap = null;

    URL networkUrl = urls[0]; //Load the first element
    try {
        networkBitmap = BitmapFactory.decodeStream(
                networkUrl.openConnection().getInputStream());
    } catch (IOException e) {
        e.printStackTrace();
    }

    return networkBitmap;
}

@Override
protected void onPostExecute(Bitmap result) {
    tIV.setImageBitmap(result);
}

这就是我从我的活动中调用它的方式:

new MyNetworkTask(myImageView).execute(photo_url);

但这将是异步的,对吗?这意味着如果在我的 Activity 之后我尝试使用 BitMap,它将是 null

有没有像“do when??”这样的循环等待这个 BitMap,然后做点什么?

或者有没有办法处理来自该异步类的回调?

【问题讨论】:

  • 有没有办法处理来自该异步类的回调是的,它被称为回调。如果你用谷歌搜索'android asynctask callback',你会得到大约 23563465467 个结果,解释它是如何工作的 :-)
  • 谢谢@TimCastelijns,我会看看这个链接:)
  • 如果您认为该链接回答了您的问题,您可以单击顶部的横幅以将其作为副本接受 :-)
  • @TimCastelijns - 谢谢!

标签: java android bitmap


【解决方案1】:

如果您说的是存储位图以便以后可以访问它,您应该在 AsyncTask 之外创建一个 public Bitmap bitmap;,然后从 AsyncTask 填充它。

class MyNetworkTask extends AsyncTask<URL, Void, Bitmap> {

ImageView tIV;

public MyNetworkTask(ImageView iv){
    tIV = iv;
}

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

    Bitmap networkBitmap = null;

    URL networkUrl = urls[0]; //Load the first element
    try {
        networkBitmap = BitmapFactory.decodeStream(
                networkUrl.openConnection().getInputStream());
    } catch (IOException e) {
        e.printStackTrace();
    }

    return networkBitmap;
}

@Override
protected void onPostExecute(Bitmap result) {
    if(result != null){
        bitmap = result;
    }
    tIV.setImageBitmap(result);
}

【讨论】:

    【解决方案2】:

    您可以为此使用模式观察器。查看此链接以了解实现http://www.tutorialspoint.com/design_pattern/observer_pattern.htm

    【讨论】:

      【解决方案3】:

      “什么时候做”是什么意思? 我想到了类似的东西:

      do{
          networkBitmap = BitmapFactory.decodeStream(
                  networkUrl.openConnection().getInputStream());
      }while(networkBitmap==null)
      

      同样适用于while循环:

      while(networkBitmap==null){
          networkBitmap = BitmapFactory.decodeStream(
                  networkUrl.openConnection().getInputStream());
      }
      

      【讨论】:

      • 不,他不是这个意思
      • 虽然一个是前测循环,一个是后测循环
      • 是的,但他还要求提供类似“do when”循环之类的东西,它基本上是一个 while 或 do-while 循环。我知道,在我的循环中不会发生任何有用的事情,但是有了这样的循环,他无论如何都可以尝试获取位图,而它是空的
      • 请注意,“while”和“when”是非常不同的东西,尤其是在编程中
      • 谢谢伙计,但我知道该怎么做并不是一件容易的事:)。我什至不知道是否有“何时做”这样的事情,这就是我问的原因。 :)
      猜你喜欢
      • 2010-09-24
      • 1970-01-01
      • 2023-03-08
      • 2012-06-06
      • 1970-01-01
      • 2011-07-14
      • 1970-01-01
      • 2012-01-10
      • 1970-01-01
      相关资源
      最近更新 更多