2017-12-26 59 views
0

Activity에 트로피를 전달할 때 Serializable이 아닌 클래스 Crop이 있습니다. 그러나 Activity에서 Fragment (골짜기 Bundles)이면 아무런 오류가 없으며 반대쪽에 drawable 객체가 오류없이 표시됩니다.액티비티와 프래그먼트간에 객체를 전달할 때 직렬화가 발생합니까

어떻게하면 하나의 경우에는 직렬화 할 수 있습니까?

public class Crop implements Serializable { 

    private String specieHarvest; 
    private String specieLocation; 
    private String specieName; 
    private Drawable img; 
} 

답변

1

먼저 질문에 답변 해 보겠습니다.

당신이보고있는 행동의 이유는 activity에 엑스트라로 객체를 전달

  • 은, 항상 그 객체가 일부 유형으로 간주되고, 안드로이드 않은 마샬링/마샬링되도록 할 것입니다 IPC의
  • fragment에 인수로 개체를 전달해도 개체가 마샬링되는 것은 아닙니다.

그러면 조각이 전송 될 때 Android에서 개체를 분해하고 재구성 할 수 있습니까?

직렬화되지 않습니다/드 - 직렬화 된 조각 그렇지 않으면, 그 객체가지도에 보관하고 getArguments().를 호출 할 때 동일한 개체가 당신에게 반환, 파괴 어떤 이유로 다시 만들어집니다하지 않는

Fragment에서 해당 개체를 변경하는 경우 실제로 전송 된 원래 참조가 변경되므로 원본 참조가 변경됩니다. CRAZY, 맞지? :)

Drawable 클래스를 살펴보면 Parcelable 또는 Serializable이 아니므로 인 텐트/인수로 전달하지 마십시오.

대신 Drawable 개체가 리소스에있는 경우 리소스 ID가 될 수있는 int를 전달하거나 String 경로를 전달할 수 있습니다.이 경로가 로컬 어딘가에 저장되는 이미지 인 경우이 경로를 전달할 수 있습니다.

Drawables 크기가 큰 경향이 있기 때문에 int 또는 string을 전달하는 것이 훨씬 더 좋습니다. 이는 의도 한 항목 초과로 인해 앱이 크래시 될 수 있습니다.

Here's 당신이 그걸 읽을 수있는 기사.

+0

그래서 그게 뭐야! 고맙습니다! 나는이 기계와 관련된 버그를 가지고있었습니다. 이 게시물에서 : [link] (https://stackoverflow.com/questions/47980425/parcelable-encountered-ioexception-writing-serializable-object-when-i-dont-seri). 나는이 질문을 쓴 이슈에 직면 해있다. 나는 지금 답을 알고있다 : 다른 Activity를 시작하려 할 때 MainActivity가 파손되어 그녀에게 붙은 Fragment가 생겨 이상한 직렬화 예외가 발생한다. 원한다면 답을 할 수 있습니다. 한 번 더 정확하게 표시 할 것입니다. 감사합니다 @elmorabea – Greggz

+1

당신은 다른 질문에 대한 답변을 추가 할 수 있습니다, 그래서 사람들이 같은 문제를 직면하면 그들은 대답을 찾습니다 :) – elmorabea