public class User implements Parcelable {
public String name;
public User(String name){
this.name=name;
}
protected User(Parcel in) {
name = in.readString();
}
public static final Creator<User> CREATOR = new Creator<User>() {
@Override
public User createFromParcel(Parcel in) {
return new User(in);
}
@Override
public User[] newArray(int size) {
return new User[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
}
}
public class ServiceService extends Service {
public ServiceService() {
}
@Override
public IBinder onBind(Intent intent) {
return new MyBinder();
}
class MyBinder extends BookName.Stub {
@Override
public String getName() throws RemoteException {
return"西游记";
}
@Override
public List<User> getList() throws RemoteException {
User user = new User("111");
User user1 = new User("222");
List<User> users = new ArrayList<>();
users.add(user1);
users.add(user);
return users;
}
}
}
interface BookName {
String getName();
List<User> getList();
void addInout(inout User user);
void addIn(in User user);
void addout(out User user);
}
这次增加了三个方法addInout,addIn,addout,之后分别测试这三个方法
修改User类
User类需要添加俩个方法,一个无参构造,一个readFromParcel
public class User implements Parcelable {
public String name;
public User(){
}
public User(String name){
this.name=name;
}
protected User(Parcel in) {
name = in.readString();
}
public static final Creator<User> CREATOR = new Creator<User>() {
@Override
public User createFromParcel(Parcel in) {
return new User(in);
}
@Override
public User[] newArray(int size) {
return new User[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
}
public void readFromParcel(Parcel dest) {
name = dest.readString();
}
}
先测试一下inout
服务端
public class ServiceService extends Service {
public ServiceService() {
}
@Override
public IBinder onBind(Intent intent) {
return new MyBinder();
}
class MyBinder extends BookName.Stub {
@Override
public String getName() throws RemoteException {
return"西游记";
}
@Override
public List<User> getList() throws RemoteException {
User user = new User("111");
User user1 = new User("222");
List<User> users = new ArrayList<>();
users.add(user1);
users.add(user);
return users;
}
@Override
public void addInout(User user) throws RemoteException {
Log.d("mmmserver","服务端获取到:"+user.name);
user.name="服务端更改";
Log.d("mmmserver","服务端修改书名:"+user.name);
}
@Override
public void addIn(User user) throws RemoteException {
}
@Override
public void addout(User user) throws RemoteException {
}
}
}
主要看inout方法,服务端接受到客户端传来的信息后,修改信息内容
客户端
private void initView() {
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
User user = new User("客户端传入");
Log.d("mmmclient", "客户端向服务端传入一本书,书名:" + user.name);
bookName.addInout(user);
Log.d("mmmclient", "服务端修改书名后,书名:" + user.name);
} catch (RemoteException e) {
e.printStackTrace();
}
}
});
}