我一直试图弄清楚为什么位图在SimpleTarget中给我一个大小值,但在SimpleTarget之外很快就会为null。
df.loc[df.isnull().mean(axis=1).lt(0.8)]
a b c d e f g h i j
1 NaN 2.0 NaN 2.0 NaN NaN 2.0 NaN NaN 2.0
2 NaN NaN 2.0 NaN 2.0 NaN 2.0 2.0 NaN NaN
4 2.0 2.0 2.0 NaN NaN NaN NaN NaN NaN NaN
编辑:AsyncTask方法。
私有Bitmap getImage(String path){
private Bitmap getImage(String path){
final Bitmap[] bitmaps = new Bitmap[1];
Glide.with(getApplicationContext())
.load(path)
.asBitmap()
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
bitmaps[0] = resource;
Log.v(TAG, "bitmap: " + bitmaps[0].getByteCount());// Returns a value as expected.
}
});
Log.v(TAG, "bitmap2: " + bitmaps[0].getByteCount());// throws a null object reference.
return bitmaps[0];
}
编辑:添加了与问题相关的日志。
final Bitmap[] bitmaps = new Bitmap[1];
new AsyncTask<Void, Void, Void>() {
Bitmap tmp;
@Override
protected Void doInBackground(Void... params) {
try {
tmp = Glide.with(getApplicationContext())
.load("http://i.annihil.us/u/prod/marvel/i/mg/b/40/image_not_available.jpg")
.asBitmap()
.into(-1,-1)
.get();
} catch (final ExecutionException | InterruptedException e) {
Log.e(TAG, e.getMessage());
}
return null;
}
@Override
protected void onPostExecute(Void dummy) {
if (null != tmp) {
// The full bitmap should be available here
bitmaps[0] = tmp;
Log.v(TAG, "bitmap: " + bitmaps[0].getHeight());
Log.d(TAG, "Image loaded");
};
}
}.execute();
Log.v(TAG, "bitmap2: " + bitmaps[0].getHeight());// throws a null object reference.
return bitmaps[0];
}
编辑:如果位图未定义为final,则会从内部类中调用。宣布为最终版。
答案 0 :(得分:1)
您正在创建对参数的引用并在其函数之外使用它,当您离开函数时,位图[0]将为null。
您必须使用以下代码创建位图的副本:
bitmaps[0] = resource.copy(resource.getConfig(), true);
您应该在onResourceReady()
内部使用此内容。
或使用Glide:
bitmaps[0] = Glide.with(getApplicationContext())
.load(path)
.asBitmap()
.into ....
.get();`
您需要将其包含在asynctask中的函数内并执行它。
请参阅this answer
,其中介绍了在后台加载并将位图设置为覆盖onPostExecute()
内的imageview。
答案 1 :(得分:0)
我终于让它发挥作用了。 首先,必须在全局工作空间中声明位图。 (就像一个对象)。 第二,Log.v必须在if语句中,因为正在使用Restful客户端服务下载数据库。它并不总能得到预期的数据。
我的解决方案:
编辑: Bitmap bitmap = null;
with tf.device("/cpu:0"):
# Define operation here
然而,在前30张图像后执行错误。我猜测它是由于从for循环调用的方法,并导致令人讨厌的错误列表。
private Bitmap getImage(final String path){
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
try {
bitmap = Glide.with(getApplicationContext())
.load(path)
.asBitmap()
.into(-1,-1)
.get();
} catch (final ExecutionException | InterruptedException e) {
Log.e(TAG, e.getMessage());
}
return null;
}
@Override
protected void onPostExecute(Void dummy) {
}
}.execute();
if(bitmap != null) {
Log.v(TAG, "bitmap2: " + bitmap.getHeight());
}
return bitmap;
}