Android 从“多媒体资料”中选择图像后显示空白屏幕

Android 从“多媒体资料”中选择图像后显示空白屏幕,android,android-imageview,android-gallery,Android,Android Imageview,Android Gallery,我试图在ImageView中输入图像,但每当我在Gallery中单击一张图片时,应用程序就会显示一个空白屏幕并关闭。 此ImageView位于片段中 创建视图上的公共视图(布局、充气机、视图组容器、, Bundle savedInstanceState){ 视图v=充气机。充气(R.layout.fragment\u auction\u add,container,false) 初始声明 public class auction_add extends Fragment { priv

我试图在ImageView中输入图像,但每当我在Gallery中单击一张图片时,应用程序就会显示一个空白屏幕并关闭。 此ImageView位于片段中

创建视图上的公共视图(布局、充气机、视图组容器、, Bundle savedInstanceState){ 视图v=充气机。充气(R.layout.fragment\u auction\u add,container,false)

初始声明

public class auction_add extends Fragment {


    private static final int SELECT_PICTURE = 10;
    private static final int PERMISSION_CODE = 11;
    ImageButton auction_add_imageViewButton;


    //References to all Auction Add Page EditText
    EditText auction_add_itemNameTxt;
    EditText auction_add_descriptionTxt;
    EditText auction_add_initialPriceTxt;
    EditText auction_add_startTimeTxt;
    EditText auction_add_endTimeTxt;

    //Reference to ImageView
    private ImageView auction_add_image;

    final Calendar myCalendar = Calendar.getInstance();
非常感谢您的帮助,谢谢

编辑:

下面是AndroidStudio的Run选项卡上的错误

W/System: A resource failed to call close. 
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.projectcrest, PID: 5618
    java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=242868079, result=-1, data=Intent { dat=content://com.android.providers.media.documents/document/image:31 flg=0x1 }} to activity {com.example.projectcrest/com.example.projectcrest.pages.LandingPage}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageURI(android.net.Uri)' on a null object reference
        at android.app.ActivityThread.deliverResults(ActivityThread.java:5015)
        at android.app.ActivityThread.handleSendResult(ActivityThread.java:5056)
        at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:51)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageURI(android.net.Uri)' on a null object reference
        at com.example.projectcrest.fragments.auction_add.onActivityResult(auction_add.java:155)
        at androidx.fragment.app.FragmentManager$9.onActivityResult(FragmentManager.java:2905)
        at androidx.fragment.app.FragmentManager$9.onActivityResult(FragmentManager.java:2885)
        at androidx.activity.result.ActivityResultRegistry.doDispatch(ActivityResultRegistry.java:377)
        at androidx.activity.result.ActivityResultRegistry.dispatchResult(ActivityResultRegistry.java:336)
        at androidx.activity.ComponentActivity.onActivityResult(ComponentActivity.java:624)
        at androidx.fragment.app.FragmentActivity.onActivityResult(FragmentActivity.java:164)
        at android.app.Activity.dispatchActivityResult(Activity.java:8310)
        at android.app.ActivityThread.deliverResults(ActivityThread.java:5008)
        at android.app.ActivityThread.handleSendResult(ActivityThread.java:5056) 
        at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:51) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:223) 
        at android.app.ActivityThread.main(ActivityThread.java:7656) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 
I/Process: Sending signal. PID: 5618 SIG: 9

通过查看异常,应用程序似乎在第
auction\u add\u image.setImageURI(selectedImageUri);
行的
\onActivityResult
函数中因NPE(空指针异常)而崩溃。这种预期/崩溃是由于
auction\u add\u image
对象具有空值而不是ImageView造成的

仔细查看您的代码后,我认为出现问题的原因是以下代码:

    auction_add_imageViewButton = v.findViewById(R.id.auction_add_imageView_button);

    auction_add_imageViewButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            imageSelectAction(v);
        }
    });
请注意,在
#onClick
函数中,您正在传递要在其上执行#findViewById操作的视图
v
。此处传递的视图
v
指的是
拍卖添加(u imageview)按钮
,而不是上面捕获的
v

我建议如下修改代码(只需重命名#onClick函数中的
v
变量):

这样可以避免变量名冲突,并解决错误

此外,如果这不能解决您的问题,请检查#findViewById是否返回ImageView而不是null。如果提供给#findViewById的Id不在屏幕上或正在执行#findViewById的视图的子视图中,则#findViewById将返回null值


另外,请检查您是否在代码中的任何位置为拍卖添加图像指定了空值。

by
显示一个空白屏幕并关闭此图像视图在一个片段中
语句中,您的意思是选择图像/照片后应用程序关闭吗?是的,这就是我的意思,很抱歉混淆当应用程序以这种方式关闭时意味着hing出错并引发异常。请您查看Android Logcat并尝试在此处发布错误消息,好吗?错误消息将有助于提供正确的解决方案。我已在帖子上添加了一个编辑,并放置了错误消息。谢谢,这解决了将引用弄乱的问题
    auction_add_imageViewButton = v.findViewById(R.id.auction_add_imageView_button);

    auction_add_imageViewButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            imageSelectAction(v);
        }
    });
    auction_add_imageViewButton = v.findViewById(R.id.auction_add_imageView_button);

    auction_add_imageViewButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View buttonView) {
            imageSelectAction(v);
        }
    });