2012-10-08 3 views
4

다음 질문을 해결하려면 약간의 도움이 필요합니다.GetSerializableExtra null 반환

두 개의 활동 A와 B가 있습니다. 활동 A는 결과 B를 시작하고 B는 직렬화 가능 객체 A로 다시 보냅니다.

활동 시작 활동 B :

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == EXPENSE_RESULT) { 
     if(resultCode == RESULT_OK){     
      ExpensePacket result = (ExpensePacket)getIntent().getSerializableExtra(PACKET_INTENT); 

      wallet.Add(result); 
      PopulateList(); 
     } 
     else{ 
      //Write your code otherwise 
     } 
    } 
}  

: 활동 A가 B로부터 전송 된 데이터를 가져

... 
    ExpensePacket packet = new ExpensePacket(); 
    ... 
    Intent returnIntent = new Intent(); 
    returnIntent.putExtra(MainActivity.PACKET_INTENT,packet); 
    setResult(RESULT_OK,returnIntent);  
    finish(); 

포인트 : (A)에 데이터를 전송

... 
    Intent intent = new Intent(MainActivity.this, ExpenseActivity.class);  
    startActivityForResult(intent, EXPENSE_RESULT); 
    ... 

활동 B 내 직렬화 가능 객체, B에서 A로 전송 된 객체 :

class ExpensePacket implements Serializable { 

    private static final long serialVersionUID = 1L;  
    private Calendar calendar; 

    public void SetCalendar(Calendar aCalendar){ 
     calendar = aCalendar; 
    } 

    public Calendar GetCalendar(){ 
     return calendar; 
    } 

    public String GetMonthYear() { 
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy"); 
     sdf.format(calendar.getTime());     

     String returnString = ""; 
     returnString += sdf.toString(); 
     returnString += "/"; 
     returnString += Functions.GetMonthName(calendar); 

     return sdf.toString(); 
    } 
} 

누군가가 B에서 A로 보낸 데이터가 null 포인터 인 이유를 알아낼 수 있습니다. , 대신 getIntent() 메소드의, 텐트 "데이터"매개 변수를 사용해야합니다 당신의 onActivityResult를() 메서드를

:

+0

데이터가 'null'인 코드는 어디에 있습니까? –

+0

코드 디버깅 나는 onActivityResult 메서드의 변수 결과가 항상 null이라는 것을 알았습니다. –

+0

그리고'A '는 실제로'MainActivity'라고 불리우나요? 나는 onActivityResult()의'PACKET_INTENT'가'B'의'MainActivity.PACKET_INTENT'와 똑같은지 확인해달라고 요청합니다. –

답변

8

은 내가 당신의 오류를 발견 생각합니다. getIntent()는 startActivityForResult()에 의해 호출 된 Activity에 의해 리턴 된 Intent가 아닌 Activity 호출에 사용 된 Intent를 리턴합니다.

결과 Intent는 onActivityResult()에서 전달되는 "data"매개 변수입니다. 거기에서 Serializable 오브젝트를 복구해야합니다.

코드로 작은 프로젝트를 만들고 문제를 재현 할 수 있습니다. 데이터 매개 변수로 getIntent()를 변경하면 문제가 해결됩니다.

그냥 한 가지 더 : 나는 당신이 문자열 returnString을 구성하기 때문에 ExpensePacket.getMonthYear()에서 또 다른 오류가 있다고 생각하지만 다른 것을 반환합니다. 그 부분을 확인해 당신이 원하는 것을하고 있는지 확인하십시오.

+0

+1 좋은 분석과 설명! –

+0

당신은 옳은 사람입니다. 정말로 좋은 분석과 설명. 감사. –