2016-08-09 5 views
0

Я хочу использовать данные, которые я получил в своем 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 

Спасибо за вашу помощь!

+0

'intent.getParcelableExtra' возвращает null. Вероятно, нет ключа под названием «imageUri». Вы можете проверить использование 'hasExtras()' перед тем, как его предотвратить, чтобы предотвратить NPE. –

+0

Это то, что я тоже думал, но как я могу проверить правильный лишний ключ, который мне нужен? – timbremer

ответ

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 
    } 
} 
+0

Использование Intent.EXTRA_STREAM отлично работало, спасибо! – timbremer

Смежные вопросы