Java 在android应用程序上设置化身

Java 在android应用程序上设置化身,java,android,android-camera,avatar,Java,Android,Android Camera,Avatar,我想让用户在设置他们的用户信息时创建一个头像(如果你愿意,可以创建个人资料图片)。我已经创建了一种方法,用于单击/触摸,要求用户拍摄照片,另一种用于长时间单击,要求用户从他们的图库中选择照片 下面是我在类文件中的方法: public void onLaunchCamera(View v) { avatarButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) {

我想让用户在设置他们的用户信息时创建一个头像(如果你愿意,可以创建个人资料图片)。我已经创建了一种方法,用于单击/触摸,要求用户拍摄照片,另一种用于长时间单击,要求用户从他们的图库中选择照片

下面是我在类文件中的方法:

public void onLaunchCamera(View v) {

    avatarButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            String strAvatarPrompt = "Take your picture to store as your avatar!";
            Intent pictureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(Intent.createChooser(pictureIntent, strAvatarPrompt), TAKE_AVATAR_CAMERA_REQUEST);
        }
    });

    avatarButton.setOnLongClickListener(new View.OnLongClickListener() {
        public boolean onLongClick(View v) {
            String strAvatarPrompt = "Choose a picture to use as your avatar!";
            Intent pickPhoto = new Intent(Intent.ACTION_PICK);
            pickPhoto.setType("image/*");
            startActivityForResult(Intent.createChooser(pickPhoto, strAvatarPrompt), TAKE_AVATAR_GALLERY_REQUEST);
            return true;
        }
    });
    }
下面是与ImageButton关联的XML:

<ImageButton
            android:id="@+id/ImageButton_Avatar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:adjustViewBounds="true"
            android:maxHeight="@dimen/avatar_size"
            android:minHeight="@dimen/avatar_size"
            android:onClick="onLaunchCamera"
            android:scaleType="fitXY"
            android:src="@drawable/avatar"></ImageButton>

看起来您可能没有定义avatarButton,如果您遵循LogCat上的起因路径,您会看到底部的一个是NullPointerException

因为我看不到行号,所以问题发生在第201行——我在代码中看到的唯一明显的空指针是avatarButton

根据你想做的,你会想做一些不同的事情

从XML中删除android:onClick=“onLaunchCamera”

设置内容视图后,在onCreate()中添加以下内容:

View avatarButton = findViewById(R.id.ImageButton_Avatar);

avatarButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        String strAvatarPrompt = "Take your picture to store as your avatar!";
        Intent pictureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(Intent.createChooser(pictureIntent, strAvatarPrompt), TAKE_AVATAR_CAMERA_REQUEST);
    }
});

avatarButton.setOnLongClickListener(new View.OnLongClickListener() {
    public boolean onLongClick(View v) {
        String strAvatarPrompt = "Choose a picture to use as your avatar!";
        Intent pickPhoto = new Intent(Intent.ACTION_PICK);
        pickPhoto.setType("image/*");
        startActivityForResult(Intent.createChooser(pickPhoto, strAvatarPrompt), TAKE_AVATAR_GALLERY_REQUEST);
        return true;
    }
});

这允许您设置具有更多控制的click和longClick侦听器。按照您的方式,直到您第一次单击onClick或onLongClick之前,您从未真正定义过onClick或onLongClick。

logcat应该会告诉您它崩溃的原因,请补充一点:我在使用logcat时遇到了问题,因为自3月31日以来,它们的性能没有任何变化。我正在调试模式下运行应用程序,但在logcat中什么也得不到logcat。我要补充一点,我不太擅长阅读logcat告诉我要诚实的东西。谢谢你。我知道你从哪里来。但是,当进入查看化身按钮等。。。我得到的错误是“变量‘avatarButton’已经在范围中定义了”我刚刚意识到avatarButton是通过initAvatar()方法中的这一行定义为ImageButton的:ImageButton avatarButton=(ImageButton)findViewById(R.id.ImageButton_Avatar);事实上,我自己已经解决了。它实际上与“onLaunchCamera”一起工作,作为XML中的onClick,并与您的以下行组合:View avatarButton=findviewbyd(R.id.ImageButton\u Avatar);
View avatarButton = findViewById(R.id.ImageButton_Avatar);

avatarButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        String strAvatarPrompt = "Take your picture to store as your avatar!";
        Intent pictureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(Intent.createChooser(pictureIntent, strAvatarPrompt), TAKE_AVATAR_CAMERA_REQUEST);
    }
});

avatarButton.setOnLongClickListener(new View.OnLongClickListener() {
    public boolean onLongClick(View v) {
        String strAvatarPrompt = "Choose a picture to use as your avatar!";
        Intent pickPhoto = new Intent(Intent.ACTION_PICK);
        pickPhoto.setType("image/*");
        startActivityForResult(Intent.createChooser(pickPhoto, strAvatarPrompt), TAKE_AVATAR_GALLERY_REQUEST);
        return true;
    }
});