Установить изображение в качестве обоев из URL (Glide + JSON) - PullRequest
0 голосов
/ 29 декабря 2018

app app

Привет, заранее спасибо тем, кто меня ведет.

У меня проблема с установкой обоев, чтокогда я нажимаю на кнопку, я получаю следующую ошибку:

2018-12-28 22: 36: 02.801 13030-13030 /?E / AndroidRuntime: ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: main java.lang.NullPointerException: Попытка вызвать виртуальный метод «логический android.graphics.Bitmap.compress (android.graphics.Bitmap $ CompressFormat, int, java.io.OutputStream)» для нулевого объектассылка

Я оставляю используемые файлы.

<?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>

открытый класс infoanimales расширяет 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();
            }
        }

    }

С этой функцией она работает идеально, но при этомизображения в папке для рисования, и что вы хотите, или что вы берете изображение URL-адрес json, 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();
        }
    }

В заключение, что мне нужно, это когда вы нажимаете на кнопку, отображаемое изображение установлено в качестве обоев

1 Ответ

0 голосов
/ 29 декабря 2018

Как я вижу, вы не используете полный путь для декодирования растрового изображения.Вам необходимо получить полное имя пути, например:

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

После этого:

Bitmap bitmap = BitmapFactory.decodeFile(uri);

Ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...