首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从库中选择图像后显示空白屏幕

从库中选择图像后显示空白屏幕
EN

Stack Overflow用户
提问于 2021-05-25 02:32:35
回答 1查看 106关注 0票数 0

我正在尝试将一张图片放入ImageView,但每当我点击Gallery上的图片时,应用程序都会显示一个空白屏幕并关闭。此ImageView在片段中

公共视图容器( inflater.inflate(R.layout.fragment_auction_add,onCreateView,LayoutInflater容器,捆绑容器){ View v= ViewGroup savedInstanceState,false);

代码语言:javascript
运行
复制
    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);
        }
    });


    dateTimeAction(v);


    return v;
}

private void imageSelectAction(View v) {
    auction_add_imageViewButton = v.findViewById(R.id.auction_add_imageView_button);
    auction_add_image = v.findViewById(R.id.auction_add_imageView);

    choosePicture();

}

private void choosePicture() {
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent, "Select Picture"), SELECT_PICTURE);
}

@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (resultCode == Activity.RESULT_OK) {
        if (requestCode == SELECT_PICTURE) {
            if (data != null && data.getData() != null) {
                Uri selectedImageUri = data.getData();

                auction_add_image.setImageURI(selectedImageUri);
            }
        }
    }
}

最初的宣言

代码语言:javascript
运行
复制
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();

感谢您的帮助!

编辑:

下面是Android Studio的Run选项卡上的错误

代码语言:javascript
运行
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-25 03:22:11

通过查看异常,似乎应用程序在行auction_add_image.setImageURI(selectedImageUri);处的#onActivityResult函数中由于NPE (空指针异常)而崩溃。由于auction_add_image对象具有空值而不是ImageView,因此会导致此预期/崩溃。

仔细查看您的代码后,我认为该问题是由于以下代码造成的:

代码语言:javascript
运行
复制
    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函数中,您传递的是视图v,您将在该视图上执行#findViewById操作。在这里,传递的视图v引用的是auction_add_imageViewButton,而不是上面捕获的v

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

代码语言:javascript
运行
复制
    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);
        }
    });

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

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

另外,检查您是否在代码中的任何位置将空值赋给了auction_add_image。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67677211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档