2012-06-15 3 views
1

나는이 질문을 이미 여기 몇 번이나 물어 봤지만, 이미 가지고있는 기능을 망칠 까봐 두려워서 내 코드에 일을 시작하기에는 자신이 없다.활동간에 정보를 전달하는 방법

내가하고 싶은 일은 데이터를 송수신 할 수있는 장치와 블루투스 연결을 설정하고 여러 가지 다른 활동에서 액세스 할 수있게하려는 것입니다. 인 텐트를 사용할 수 있다는 것을 알고 있지만 누구나 의도가 어떻게 작동하는지 설명 할 수 있습니까?

Activity로 시작한 경우 어떻게 그 Activity 내에서 개체를 만든 다음 끝내고 개체가 남아 있는지 이해할 수 없습니다. 다음 활동에서 인 텐트를 호출하면 어떻게 액세스합니까?

인 텐트를 통해 전달되거나, 다른 활동에서 연 다음 다른 활동을 통해 다시 전달되는 등등의 사용자 지정 개체로 활동의 예제 코드를 찾을 수 없습니다. 내가 찾을 수있는 것은 string의 int에 대한 것이고, 그 메소드는 특정 객체에 대해 하드 코딩 된 것으로 보인다.

도움을 주시면 감사하겠습니다.

+2

B를 의도에 parceable 객체를 넣어 시도 B 및 활동에 다시 얻을 수있는에서 사용자 지정 개체를 보내려면 A와 B 을 [이 사용] (http://stackoverflow.com/questions/2091465/how-do-i-pass-data-between-activities-in-android) – Praveenkumar

+0

가능한 복제 [안드로이드에서 활동간에 데이터 전달] (http : //stackoverflow.com/questions/2965109/passing-data-between-activities-in-android) – Idolon

+0

내 문제를 좀 더 자세히 지정했기 때문에 복제본을 생각하지 않았습니다. 나는 데이터를 전달하는 것이 아니라, 커스텀 클래스를 반복해서 전달하려고한다. 다른 스레드는 액티비티 # 1에서 액티비티 # 2로 문자열을 전달하는 것에 대해 이야기하고 있습니다. – JuiCe

답변

1

복잡한 개체를 전송하는 좋은 예를 찾을 수없는 좋은 이유가 있습니다. 그렇게 많이 생각하지 않아도됩니다. 모든 객체를 intent로 전송할 수 있습니다. 전송할 클래스를 Serializable 또는 Parcalable로 구현하여 선언 할 수 있습니다.

하지만 정당한 이유가없는 한 그렇게하지 않는 것이 좋습니다. "교차 액티비티"개체 (데이터베이스, 싱글 톤, 서비스 ..)를 만드는 무제한 방법이 있으며, 복잡한 개체를 의도로 전달하는 것은 무거운 작업입니다. 또한 끔찍한 공연을합니다. - 어쨌든

당신은 어쨌든이 방법 이렇게하려면 다음

이 serlizable 개체를 전달하는 방법입니다 :

Intent intent = new Intent(); 
    intent.putExtra(name, someInstanceOfClassWhichImplementsSerializableInterface); 

이 다른 활동을 acheive하는 방법입니다 :

getIntent().getSerializableExtra(name); 

당신이 활동을 마친 후에도 개체가 어떻게 살아 있는지 이해할 수 없다는 질문에 대해 - finish() 활동이 distrac을 유발하지 않습니다. 토르 !!!하지만 onDestoy() 콜백으로 트리거합니다. 시스템은 그것이 올바른 시점인지 여부를 판단하여 사고가 났을지라도 Intent 객체가 살아남을 수있는 것을 방지하지 못합니다. 아무도 당신의 활동이 그것에 대한 참조 만 가지고 있다고 말했기 때문에. 시스템에 의해 열리는 새로운 활동에 그것을 전달하는 목적을 위해 시스템이 보유한 의도 참조.

+0

당신, 당신은 싱글 톤 싱글 톤 방법이 내 문제에 대한 더 나은 접근 방법이라고 생각합니까? 그것이 의도에 대한 최선의 대안 인 것처럼 보입니다. 나는 의도가 마음에 들지 않습니다. 최선의 선택이 아닌 것 같습니다. – JuiCe

+1

공유 데이터를 보유하는 singeltone 클래스는 좋은 옵션이 될 수 있습니다. 하지만 클래스가 너무 복잡하지 않거나 큰 것이 아니라면 - Serializble을 지나치게 끔찍하지 않게 전달하십시오. 그런 식으로 복잡한 큰 객체를 전달하는 것은 바람직하지 않다는 것을 명심하십시오. –

+0

싱글 톤 메소드를 사용하는 경우 인 텐트를 사용하여 새 액티비티를 시작합니까? 싱글 톤 방법이 나를 위해 가장 잘 작동 할 것이라고 생각합니다. 최소의 새로운 정보를 배우는 것이 필요하기 때문입니다. – JuiCe

1

인 텐트를 사용하면 개체를 바이트 스트림으로 변환하는 것과 같은 직렬화 된 개체를 보낼 수 있습니다. 객체를 그대로 전송하려면 핸들러를 사용할 수 있습니다. 예 :

  1. 블루투스 연결 서비스를 사용하여 (안드로이드 서비스)
  2. 개체가 보내 msg.obj에 추가 보낼 수의 서비스에서 정적 객체
  3. 될 것입니다 활동을 핸들러를 정의하는 MSG는 핸들러로 만들
2

사용자 지정 개체를 작업에서 다른 개체로 전달하려면 개체가 Parcelable 인터페이스를 구현해야합니다.

Here 당신은 Parcelable을 구현하는 객체의 예를 찾을 수 있습니다. 이 개체의 인스턴스가 있으면 인 텐트에 추가하고 다른 활동으로 전달할 수 있습니다.

의 당신이이 개 활동에 있다고 가정 해 봅시다 : 당신이

// Activity A 
Notebook myNotebook = new Notebook(); // the "Parcelable" object 
Intent intent = new Intent(A.this, B.class); 
intent.putExtra("object", myNotebook); 
startActivityForResult(intent); 

// Activity B 
// in onCreate method 
Notebook notebook = intent.getParcelableExtra("object"); 
관련 문제