您的位置:首页 > 大数据 > 人工智能

AIDL中in,out和inout的区别

2016-06-02 15:24 573 查看
in:只能在客户端设置值,传入服务端,服务端获取客户端设置的值

out:用于在服务端设置值,服务端设置这个值后,客户端也可以得到这个由服务端设置的值,客户端如果有设置初始值,到了服务端会得不到这个值

inout:服务端可以得到客户端设置的值,客户端也可以得到服务端设置的值

基本数据类型参数只能是in类型

比如,服务端提供这3个方法:

void   getaList(out String[] list);
void   setaList(in String[] list);
void   gettList(inout String[] list);


@Override
public void getaList(String[] list) throws RemoteException {
// TODO Auto-generated method stub
list[0]="服务端赋值信息:"+info;
}


public void setaList(String[] list) throws RemoteException {
// TODO Auto-generated method stub
/**
* 取得客户端传入的值
*/
if(list.length>0)
info=list[0];
}


客户端调用:

public void setaList()
{
if(iBase!=null)
{
try {
iBase.setaList(new String[]{"战国剑"});
Toast.makeText(getApplicationContext(), "传值'战国剑'到服务端", Toast.LENGTH_SHORT).show();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

再调用:

public void getaList()
{
if(iBase!=null)
{
String[] list =new String[1];
try {
iBase.getaList(list);
Toast.makeText(getApplicationContext(), "服务端返回内容:"+list[0], Toast.LENGTH_SHORT).show();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}


可以得到客户端设置的值

服务端改为:

@Override
public void getaList(String[] list) throws RemoteException {
// TODO Auto-generated method stub
String strOri = list[0];
list[0]=strOri+"--服务端赋值信息:"+info;
}


客户端改为:

public void getaList()
{
if(iBase!=null)
{
String[] list={"out也可以传入参数值吗"};
try {
iBase.getaList(list);
Toast.makeText(getApplicationContext(), "服务端返回内容:"+list[0], Toast.LENGTH_SHORT).show();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}


打印出来的list[0]中,原始传入的值“out也可以传入参数值吗”变成了null,表示out标志不会接受传入的参数值

把getlist的参数改成inout类型,就可以接受到传入的参数值了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: