2015-01-26 4 views
0

MainActiviy에서 분할 가능한 객체를받는 중입니다. 필자는 Parcelable을 얻기 전에 확인을 위해Parcelable이 NULL인지 확인하는 방법

if((Task)getIntent().getExtras().getParcelable(Create.TASK_KEY) != null) 

을 확인하려고했습니다. 불행하게도, 이것은 널 포인터 예외로 어플리케이션을 충돌시킵니다. 어떻게 필자가 그것을 검색하기 전에 사용할 수 있는지 확인하려면 어떻게합니까?

+1

을이 중'getIntent()'또는'getExtras()'반환'null'을 의미, NPE와 충돌됩니다. – kcoppock

답변

4

당신은 내부 번들이 null가 아닌 경우에만 true를 반환하고 올바르게 당신은 또한 수 @kcoppock에서 지적

매개 변수로 제공되는 키를 가진 개체가

if (getIntent().hasExtra(Create.TASK_KEY)) { 

    } 

사용할 수 있습니다 번들에 null 오브젝트를 넣습니다.

Task task = null; 
    if ((task = getIntent().getParcelableExtra(Create.TASK_KEY)) != null) { 
    // do something with task 
    } 
+0

Intent가 'intent.putExtra (Create.TASK_KEY, null);'로 채워진 경우와 같이 값이 null이 아닌 것을 기술적으로 보장하지는 않지만. – kcoppock

+0

putExtra 메서드를 사용하여 모호한 부분이 생길 수 있으므로 null을 추가 할 수 없습니다. – giorashc

+0

@kcoppock 그것을 지적 해 주셔서 감사합니다. 나는 하나가 null 객체를 넣을 수 있다는 것을 몰랐다. 나는 내 대답을 편집했다. 이견있는 사람 ? – Blackbelt

2

getExtras가 Null 값을 반환하므로 코드 결과가 NullPointerException이됩니다. 너무 널 (null) 값에 대한 엑스트라를 확인하십시오 :

Bundle extras = getIntent().getExtras(); 
if(extras != null && extras.getParcelable(Create.TASK_KEY) != null) { 
    ... 
} 
관련 문제