VinotintoPlayer
VinotintoPlayer

Reputation: 1

Set image as wallpaper from url (Glide + json)

app app

Hi, thanks in advance to those who guide me.

I have a problem with the Set Wallpaper, that when I clicked on the button, I get the following error:

2018-12-28 22: 36: 02.801 13030-13030 /? E / AndroidRuntime: FATAL EXCEPTION: main      java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.graphics.Bitmap.compress (android.graphics.Bitmap $ CompressFormat, int, java.io.OutputStream)' on a null object reference

I leave the files used.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:orientation="vertical"
    android:id="@+id/thumbnail2"
    android:padding="5dp">

    <TextView
        android:id="@+id/txtclose"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_gravity="end"
        android:layout_marginTop="5dp"
        android:layout_marginEnd="5dp"
        android:layout_marginRight="5dp"
        android:layout_marginBottom="5dp"
        android:background="@drawable/circulo"
        android:gravity="center"
        android:text="@string/equis"
        android:textColor="@android:color/background_light"
        android:textStyle="bold" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:orientation="vertical">
<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="end">

        <Button
                android:id="@+id/btn"
                android:layout_width="159dp"
                android:layout_height="wrap_content"
                android:layout_gravity="bottom|center"
                android:layout_marginBottom="25dp"
                android:background="@drawable/borde_redondo"
                android:text="Establecer como Fondo de Pantalla"
                android:textColor="#ffffff" />

</FrameLayout>
    </LinearLayout>
</LinearLayout>

public class infoanimales extends AppCompatActivity {

        private RequestOptions options;
        TextView txtclose;
        LinearLayout img;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_infoanimales);

            Button button = findViewById(R.id.btn);

            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    setWallpaper();
                }
            });

            if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            }

            this.options = new RequestOptions()
                    .diskCacheStrategy(DiskCacheStrategy.AUTOMATIC);

            String image_url = getIntent().getExtras().getString("img2");

            img = findViewById(R.id.thumbnail2);
            Glide.with(this).load(image_url).into(new SimpleTarget<Drawable>() {
                @Override
                public void onResourceReady(@NonNull Drawable fondoreceta, Transition<? super Drawable> transition) {
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                        img.setBackground(fondoreceta);
                    }
                }
            });

            TextView txtclose = findViewById(R.id.txtclose);
            txtclose.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {

                    finish();
                }
            });
        }

        private void setWallpaper() {
            Bitmap bitmap = BitmapFactory.decodeFile("img2");
            WallpaperManager manager = WallpaperManager.getInstance(getApplicationContext());

            try {
                manager.setBitmap(bitmap);
                Toast.makeText(this, "Listo", Toast.LENGTH_SHORT).show();

            } catch (IOException e) {
                Toast.makeText(this, "error", Toast.LENGTH_SHORT).show();
            }
        }

    }

With this function, it works perfect, but that is having the images in the drawable folder, and what you want or what it is that you take the image of the json url, traide with glide

private void setWallpaper() {
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.cochinito);
        WallpaperManager manager = WallpaperManager.getInstance(getApplicationContext());

        try {
            manager.setBitmap(bitmap);
            Toast.makeText(this, "Listo", Toast.LENGTH_SHORT).show();

        } catch (IOException e) {
            Toast.makeText(this, "error", Toast.LENGTH_SHORT).show();
        }
    }

In conclusion, what I need is that when you click on the button, the displayed image is set as wallpaper

Upvotes: -1

Views: 541

Answers (2)

Mohammad Reza
Mohammad Reza

Reputation: 95

Set wallpaper with Glide4+ I did like this:

public void setAsWallpaper() {
            Glide.with(requireContext())
                    .asBitmap()
                    .load(listItem.get(position).getWallpaperImage())
                    .into(new SimpleTarget<Bitmap>() {
    
                        @Override
                        public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
    
                            try {
                                WallpaperManager.getInstance(requireContext()).setBitmap(resource);
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                    });
        }

Upvotes: 0

Aykut Uludağ
Aykut Uludağ

Reputation: 4349

As I can see, you are not using full path for decoding bitmap. You need to obtain full path name like:

String uri =  Environment.getExternalStorageDirectory().toString() + "/" + PHOTO_DIR  + "/test.jpg";

After that:

Bitmap bitmap = BitmapFactory.decodeFile(uri);

Reference

Upvotes: 0

Related Questions