问题
I just got into this problem on the line CreateScaledBitmap, I am trying to set this image as device's wallpaper and I need to scale this image to the device, thats why I am doing this method but unfortunately I cant fix this Bitmap width() error
setWall.setOnClickListener(new View.OnClickListener() {
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
public void onClick(View view) {
Picasso.with(getApplicationContext()).load(imageBrought).into(new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int height = metrics.heightPixels;
int width = metrics.widthPixels;
bitmap = Bitmap.createScaledBitmap(bitmap, width, height, true);
WallpaperManager wallpaperManager = WallpaperManager.getInstance(AppMomentSelected.this);
wallpaperManager.setWallpaperOffsetSteps(1, 1);
wallpaperManager.suggestDesiredDimensions(width, height);
try {
wallpaperManager.setBitmap(bitmap);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
});
回答1:
You have Url of an image from your Firebase but approach you use to get Bitmap from Url is not efficient and probably not possible. Simple thing you need to do is to use some custom library for downloading images for example Picasso
http://square.github.io/picasso/
Add to your app gradle: compile 'com.squareup.picasso:picasso:2.5.2'
And now you can use Picasso to download image from Url and convert to Bitmap:
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int height = metrics.heightPixels;
int width = metrics.widthPixels;
WallpaperManager wallpaperManager = WallpaperManager.getInstance(AppMomentSelected.this);
wallpaperManager.setWallpaperOffsetSteps(1, 1);
wallpaperManager.suggestDesiredDimensions(width, height);
Picasso.with(this)
.load(imageBrought)
.resize(width, height)
.into(new Target() {
@Override
public void onBitmapLoaded (final Bitmap bitmap, Picasso.LoadedFrom from) {
/* Save the bitmap or do something with it here */
wallpaperManager.setBitmap(bitmap);
}
});
来源:https://stackoverflow.com/questions/48551226/bitmap-getwidth-on-a-null-object-reference