android의 Intent 복잡한 데이터 전달 2 (Object 형식의 데이터)

4489 단어
Parcelable 방식 사용
전제: Object는 Parcelable 인터페이스를 구현해야 합니다.
Parcelable로 Object의 구문:bundle.putParcelable(key,object); Parcelable로 Object의 구문을 받습니다:object=(Object)getIntent().getParcelableExtra(key); Parcelable 인터페이스를 실현하는 클래스는 비교적 복잡한데 Parcelable는 무엇입니까?Android는 Intent 또는 IPC를 통해 캡슐화된 데이터로 사용되는 컨테이너인 Parcel의 새로운 유형을 제공합니다.기본 유형 이외에 Parcelable 인터페이스를 구현한 클래스만 Parcel에 넣을 수 있습니다.Parcelable 인터페이스를 구현하려면 다음 세 가지 방법이 필요합니다.
1) writeToParcel 메서드이 메서드는 외부에서 제공된 Parcel에 클래스 데이터를 씁니다.선언: writeToParcel(Parcel dest, int flags).2) describeContents 메서드바로 0으로 돌아가면 됩니다.
3) 정적 Parcelable.Creator 인터페이스, 이 인터페이스에는 두 가지 방법이 있습니다. 그것이 바로 CreateFromParcel(Parcel in)입니다. in에서 클래스를 만드는 실례를 실현하는 기능입니다.새 Array (int size) 는 T, 길이가 size인 그룹을 만들고,returnnew T [size] 를 만듭니다.됐습니다.이 방법은 외부 클래스가 본 클래스의 그룹을 반서열화하여 사용하도록 제공하는 것이다.
1) 먼저 만든 프로젝트 프로젝트에서 Parcelable 인터페이스를 구현한 PersonInfo 솔리드 클래스를 구축한 다음 다음과 같은 몇 가지 속성을 정의하고 해당하는 set, get 메소드를 생성합니다.
package zjh.android.bean;
 
import android.annotation.SuppressLint;
import android.os.Parcel;
import android.os.Parcelable;
 
@SuppressLint("ParcelCreator")
public class PersonInfo implements Parcelable{
private String name;
private String address;
private int age;
public PersonInfo() {
}
 
public PersonInfo(String name,String address,int age){
this.name = name;
this.address = address;
this.age = age;
}
public String getName() {
return name;
}
 
public void setName(String name) {
this.name = name;
}
 
public String getAddress() {
return address;
}
 
public void setAddress(String address) {
this.address = address;
}
 
public int getAge() {
return age;
}
 
public void setAge(int age) {
this.age = age;
}
 
@Override
public int describeContents() {
return 0;
}
 
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeString(address);
dest.writeInt(age);
}
 
public static final Parcelable.Creator<PersonInfo> CREATOR = new Creator<PersonInfo>() {
@Override
public PersonInfo[] newArray(int size) {
return new PersonInfo[size];
}
@Override
public PersonInfo createFromParcel(Parcel source) {
PersonInfo personInfo = new PersonInfo();
personInfo.name = source.readString();
personInfo.address = source.readString();
personInfo.age = source.readInt();
return personInfo;
}
};
}

2) 다음과 같은 코드로 데이터를 보내는 데 사용되는 SendActivity 클래스를 설정합니다.
package zjh.android.lx;
 
import zjh.android.bean.PersonInfo;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
 
public class SendActivity extends Activity {
private Button send;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.activity_main);
this.send = (Button)super.findViewById(R.id.send);
this.send.setOnClickListener(new OnClickListenerImpl());
}
private final class OnClickListenerImpl implements OnClickListener{
 
@Override
public void onClick(View v) {
PersonInfo personInfo = new PersonInfo("  ","  ",22);
Intent intent = new Intent(SendActivity.this,ReceiveActivity.class);
Bundle bundle = new Bundle();
//  writeToParcel()  , dest   
bundle.putParcelable("personInfo", personInfo);
intent.putExtras(bundle);
SendActivity.this.startActivity(intent);
}
}
 
}
 

3) 다음과 같이 Parcelable 유형의 복잡한 데이터를 수신할 수 있도록 설정합니다.
package zjh.android.lx;
 
import zjh.android.bean.PersonInfo;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
 
public class ReceiveActivity extends Activity {
private TextView msg;
 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.receive);
this.msg = (TextView) super.findViewById(R.id.msg);
Intent intent = super.getIntent();
//      createFromParcel()  ,  Parcel  
PersonInfo personInfo = intent.getParcelableExtra("personInfo");
this.msg
.setText("name=" + personInfo.getName() + "
" + "address=" + personInfo.getAddress() + "
" + "age=" + personInfo.getAge()); } }

4) AndroidManifest.xml 파일에 복잡한 데이터를 수신하기 위한 Activity가 다음과 같이 추가됩니다.
 <activity android:name="zjh.android.lx.ReceiveActivity"/>

좋은 웹페이지 즐겨찾기