当前位置: 首页 > 知识库问答 >
问题:

当我点击任何按钮时,应用程序都会崩溃

张瀚漠
2023-03-14

一切正常,应用程序出现了。但当我点击任何切换按钮时,应用程序就会崩溃。

我试过了,但找不到问题。其实我的知识还不够,我是这个领域的新手。所以请帮帮我。

这是查看活动。JAVA

package com.wallpaper.wallperx;

import android.Manifest;
import android.annotation.SuppressLint;
import android.app.WallpaperManager;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.FileProvider;

import com.github.clans.fab.FloatingActionButton;
import com.github.clans.fab.FloatingActionMenu;
import com.squareup.picasso.Picasso;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.UUID;

public class ViewActivity<bgDrawable> extends AppCompatActivity implements View.OnClickListener {

    ImageView imageView;
    FloatingActionMenu floatingActionMenu;
    FloatingActionButton floatingActionButton, btn_set, btn_share, btn_download;
    private static final int PERMISSION_REQUEST_CODE = 1000;

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == PERMISSION_REQUEST_CODE) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
                Toast.makeText(this, "Permission Granted", Toast.LENGTH_SHORT).show();
            else
                Toast.makeText(this, "Permission Denied", Toast.LENGTH_SHORT).show();
        }

    }


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

        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                requestPermissions(new String[]{
                        Manifest.permission.WRITE_EXTERNAL_STORAGE
                }, PERMISSION_REQUEST_CODE);
            }

            floatingActionMenu = findViewById(R.id.floatingActionMenu);
            btn_set = findViewById(R.id.SetWallpaper);
            btn_share = findViewById(R.id.ShareWallpaper);
            btn_download = findViewById(R.id.DownloadWallpaper);

            btn_set.setOnClickListener(this);
            btn_share.setOnClickListener(this);
            btn_download.setOnClickListener(this);

            imageView = findViewById(R.id.fullImage);
            Picasso.get().load(getIntent().getStringExtra("images")).into(imageView);
        }


        @RequiresApi(api = Build.VERSION_CODES.M)
        @Override
        public void onClick (View v){

            switch (v.getId()) {
                case R.id.SetWallpaper:
                    SetWallpaper();
                    floatingActionButton.toggle(true);
                    break;

                case R.id.ShareWallpaper:
                    ShareWallpaper();
                    floatingActionButton.toggle(true);
                    break;

                case R.id.DownloadWallpaper:
                    saveImage();
                    floatingActionButton.toggle(true);
                    break;
            }
        }

        @RequiresApi(api = Build.VERSION_CODES.M)
        private void saveImage ()
        {
            if (ActivityCompat.checkSelfPermission(ViewActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                Toast.makeText(ViewActivity.this, "You Should Grant Permission", Toast.LENGTH_SHORT).show();
                if (Build.VERSION.SDK_INT > -Build.VERSION_CODES.M) {
                    requestPermissions(new String[]{
                            Manifest.permission.WRITE_EXTERNAL_STORAGE
                    }, PERMISSION_REQUEST_CODE);
                }
            } else {

                String fileName = UUID.randomUUID().toString() + ".jpg";
                Picasso.get().load(getIntent().getStringExtra("images")).into(new SaveImageHelper(getBaseContext(),
                        getApplicationContext(), getContentResolver(),
                        fileName,
                        "Image Description"));

            }

        }

        @SuppressLint("SetWorldReadable")
        private void ShareWallpaper () {

            Bitmap bitmap = getBitmapFromView(imageView);
            try {
                File file = new File(this.getExternalCacheDir(), "black.png");
                FileOutputStream fOut = new FileOutputStream(file);
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
                fOut.flush();
                fOut.close();
                file.setReadable(true, false);
                Intent intent = new Intent(android.content.Intent.ACTION_SEND);
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                intent.putExtra(Intent.EXTRA_STREAM, FileProvider.getUriForFile(ViewActivity.this, BuildConfig.APPLICATION_ID + "provider", file));
                intent.setType("image/*");
                startActivity(Intent.createChooser(intent, "Share this image Via"));
            } catch (Exception e) {
                e.printStackTrace();
            }


        }
        private Bitmap getBitmapFromView (View view){
            Bitmap returnBitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
            Canvas canvas = new Canvas(returnBitmap);
            Drawable bgDrawable = view.getBackground();
            if (bgDrawable != null)
                bgDrawable.draw(canvas);
            else
                canvas.drawColor(Color.WHITE);
            view.draw(canvas);
            return returnBitmap;
        }

        private void SetWallpaper () {
            Bitmap bitmap = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
            WallpaperManager manager = WallpaperManager.getInstance(getApplicationContext());
            try {
                manager.setBitmap(bitmap);
                Toast.makeText(this, "your Wallpaper set successfully!", Toast.LENGTH_SHORT).show();
            } catch (IOException e) {
                Toast.makeText(this, "Ooh no... its an Error!", Toast.LENGTH_SHORT).show();
            }
        }
    }

还有这只logcat

2020-03-18 03:16:50.407 31609-31609/? E/lpaper。wallper:运行时设置的未知位_标志:0x8000 2020-03-18 03:17:04.862 31609-31609/com。墙纸。wallperx E/AndroidRuntime:致命异常:主进程:com。墙纸。沃珀,PID:31609爪哇。lang.NullPointerException:尝试调用虚拟方法的void com。github。家族。绝妙的。浮动操作按钮。在com的空对象引用上切换(布尔值)。墙纸。沃珀。查看活动。android上的onClick(ViewActivity.java:97)。看法看法android上的performClick(View.java:7125)。看法看法android上的performClickInternal(View.java:7102)。看法看法在Android上获得3500美元(View.java:801)。看法查看$PerformClick。在android上运行(View.java:27336)。操作系统。汉德勒。android上的handleCallback(Handler.java:883)。操作系统。汉德勒。android上的dispatchMessage(Handler.java:100)。操作系统。活套。android上的loop(Looper.java:214)。应用程序。活动线程。java上的main(ActivityThread.java:7356)。朗,反思一下。方法在com上调用(本机方法)。Android内部的操作系统。RuntimeInit$MethodAndArgsCaller。在com上运行(RuntimeInit.java:492)。Android内部的操作系统。合子体。main(ZygoteInit.java:930)

共有3个答案

尉迟宣
2023-03-14

您忘记了,所以当您调用FloatingActionButton的函数切换时,它将为null:

乐正洲
2023-03-14

Move floatingActionMenu=findViewById(R.id.floatingActionMenu);在权限部分之外,视图为空。

floatingActionMenu = findViewById(R.id.floatingActionMenu);
btn_set = findViewById(R.id.SetWallpaper);
btn_share = findViewById(R.id.ShareWallpaper);
btn_download = findViewById(R.id.DownloadWallpaper);

btn_set.setOnClickListener(this);
btn_share.setOnClickListener(this);
btn_download.setOnClickListener(this);

imageView = findViewById(R.id.fullImage);


if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                requestPermissions(new String[]{
                        Manifest.permission.WRITE_EXTERNAL_STORAGE
                }, PERMISSION_REQUEST_CODE);
            }
            Picasso.get().load(getIntent().getStringExtra("images")).into(imageView);
        }
李辉
2023-03-14

这个bug说:com。github。家族。绝妙的。浮动操作按钮。在以下位置对空对象引用切换(布尔)“

如果您遵循其他项目的代码,例如floatingActionMenu,您将看到此项目分配了一个视图:

floatingActionMenu = findViewById(R.id.floatingActionMenu);

您应该对floatingActionButton执行相同的操作,并使用findViewById为其指定布局元素,然后再对其执行任何操作。在onCreate方法中,与使用floatingActionMenu一样,是最好的选择,但如果:

floatingActionButton = findViewById(R.id.floatingActionButton);

假设floatingActionButton在布局上有一个idfloatingActionButton

 类似资料:
  • 当我在设备上运行应用程序时单击增量按钮时,我的应用程序意外地强制执行这是我的activity_main.xml代码 这是我的mainactivity.java文件 这是调试报告05-23 22:14:45.695 297 36-29736/com.orton.birthdayCard E/AndroidRuntime:致命异常:主进程:com.orton.birthdayCard,PID:2973

  • 我是android新手,我正在学习一些教程,在这一点上,当我点击登录按钮时,应用程序不断崩溃。当我运行应用程序并单击登录按钮时,应用程序崩溃,在logcat中,它显示java RuntimeException的这个错误。这是我的logcat,loginactivity。xml和loginactivity。JAVA JAVAlang.RuntimeException:无法启动活动组件信息{com.e

  • 每次我点击按钮1,我的应用程序就会崩溃。同一活动中的另一个按钮可以正常工作。我已经试过更换按钮和代码了。控制台中没有错误。

  • 每当我单击登录页面中的“注册”按钮时,应用程序就会崩溃,无法移动到下一个活动。我已经在这个问题上纠缠了一天,似乎在任何地方都找不到解决办法。 下面是我为注册按钮方法编写的代码。(和是文本输入布局) Logcat在第7行显示错误,即ref.child(…行)。我尝试了第7行的替代方法,如:

  • 这是崩溃错误logcat,每次我时钟在我的寄存器btn应用程序崩溃。 我的模拟器是在Android模拟器设备上的2gb ram。 2019-09-22 16:36:39.307 6454-6454/com。康奈克斯。connexsocial E/AndroidRuntime:致命异常:主进程:com。康奈克斯。connexsocial,PID:6454Android系统。所容纳之物Activity

  • } 以下是我从logcat收到的错误: