android의 Intent 복잡한 데이터 전달 2 (Object 형식의 데이터)
전제: 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
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"/>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.