在方法之间传递信息

时间:2016-08-09 19:39:44

标签: java android android-studio android-intent

我想在另一种方法中使用我在onCreate()中获得的数据。我知道这是基本的Java,但我不能让这个特定的东西工作。 场景:用户通过他的图库将图像共享到我的应用程序。我通过意图收到了uri,并想要展示uri的祝酒词。到现在为止还挺好。这就是我得到的:

@Override
 protected void onCreate(Bundle savedInstanceState) {
 ...
    // Handle incoming shared image
    // Get intent, action and MIME type
    Intent intent = getIntent();
    String action = intent.getAction();
    String type = intent.getType();

    if (Intent.ACTION_SEND.equals(action) && type != null) {
        if ("text/plain".equals(type)) {
            handleWrongContent(intent); // Handle text being sent
        } else if (type.startsWith("image/")) {
            handleSendImage(intent); // Handle single image being sent
        }
    } else if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null) {
        if (type.startsWith("image/")) {
            handleWrongContent(intent); // Handle multiple images being sent
        }
    }
 ...
}

private void handleSendImage(Intent intent) {
    String str = intent.getParcelableExtra("imageUri").toString();
    Toast.makeText(this, str, Toast.LENGTH_LONG).show();
}

如果我现在试试这个,我会得到这个NPE:

Attempt to invoke virtual method 'java.lang.String     
java.lang.Object.toString()' on a null object reference

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

intent.getParcelableExtra返回null。可能在意图中没有名为imageUri的密钥。您可以在获取之前使用hasExtras()进行检查以防止NPE。

而不是imageUri,请尝试使用Intent.EXTRA_STREAM。在Handle the Incoming Content处查看Receiving Simple Data from Other Apps。引用它,尝试使用:

void handleSendImage(Intent intent) {
    Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
    if (imageUri != null) {
        // Update UI to reflect image being shared
    }
}