代码之家  ›  专栏  ›  技术社区  ›  newbieCoder.pkg

如何使用Bundle传递空对象

  •  0
  • newbieCoder.pkg  · 技术社区  · 7 年前

    我使用bundle将图像uri从活动发送到片段。

    问题是,用户可能会选择不使用图像,到那时,我将有一个空字符串,这将导致以下错误:

    活动:

    private Uri mainImageUri = null;
    
    // Image Crop 
    
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
            CropImage.ActivityResult result = CropImage.getActivityResult(data);
            if (resultCode == RESULT_OK) {
    
                mainImageUri = result.getUri();
                profilePic.setImageURI(mainImageUri);
    
            } else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) {
    
                Exception error = result.getError();
            }
        }
    }
    
    // OnCreateView
    
    String profilePicUri = mainImageUri.toString();
    
    // OnClickListener
    
    Bundle bundle = new Bundle();
                                bundle.putString("USER_PIC_URI", profilePicUri);
                                fragment.setArguments(bundle);
                                //fragmentTransaction...etc
    

    碎片

    Bundle bundle = getArguments();
        final String profilePicUri = bundle.getString("USER_PIC_URI");
    

    Logcat公司

    java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.net.Uri.toString()' on a null object reference
    

    我试过了,但是没有运气

     Bundle bundle = new Bundle();
                                if (mainImageUri != null) {
                                bundle.putString("USER_PIC_URI", profilePicUri);
                                } else {
                                bundle.putString("USER_PIC_URI", "");
                                }
                                fragment.setArguments(bundle);
    

    如何实现if语句来处理不想上载图片的用户创建的NullPointerException?

    2 回复  |  直到 7 年前
        1
  •  4
  •   Tyler V    7 年前

    问题不是字符串为空,而是uri为空,因此您不能调用 uri.toString() 在上面。

    一种解决方案是在打包时检查空uri(所以不要调用 mainImageUri.toString() 在当前位置,删除 profilePicUri 完全)并且仅在非空时尝试将其转换为字符串

    Bundle bundle = new Bundle();
    if (mainImageUri != null) {
        bundle.putString("USER_PIC_URI", mainImageUri.toString());
    } else {
        bundle.putString("USER_PIC_URI", "");
    }
    fragment.setArguments(bundle);
    

    你的错误来自这条线 mainImageUri 为空

    String profilePicUri = mainImageUri.toString();
    
        2
  •  0
  •   Yusuf Çağlar    7 年前
    String profilePicUri = null;
    
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
            CropImage.ActivityResult result = CropImage.getActivityResult(data);
            if (resultCode == RESULT_OK) {
    
                mainImageUri = result.getUri();
                profilePic.setImageURI(mainImageUri);
                profilePicUri = mainImageUri.toString();
    
            } else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) {
    
                Exception error = result.getError();
            }
        }
    }
    

    profilePicUri应该是 全球的 变量。你不应该用onCreate方法初始化它,你应该用 活动结果 方法。