Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javarmi-传递对象_Java_Android_Raspberry Pi_Rmi - Fatal编程技术网

javarmi-传递对象

javarmi-传递对象,java,android,raspberry-pi,rmi,Java,Android,Raspberry Pi,Rmi,我在Raspberry Pi上运行Java程序,在智能手机上运行Android应用程序。应用程序应该能够调用在Raspi上运行的方法。 由于Android不包含标准的javarmi包,我使用了LipeRMI: 到目前为止,LipeRMI在传递基本数据类型(如boolean或int)时运行良好 我现在要做的是将ArrayList从服务器传递到应用程序,但每次运行该方法时,我都会收到以下错误: LipeRMIException:Class java.util.ArrayList is not ass

我在
Raspberry Pi
上运行Java程序,在智能手机上运行
Android应用程序。应用程序应该能够调用在
Raspi
上运行的方法。 由于
Android
不包含标准的javarmi包,我使用了
LipeRMI

到目前为止,
LipeRMI
在传递基本数据类型(如boolean或int)时运行良好

我现在要做的是将
ArrayList
从服务器传递到应用程序,但每次运行该方法时,我都会收到以下错误:

LipeRMIException:Class java.util.ArrayList is not assignable from control.ServerInt
at lipermi.handler.CallHandler.exportObject(CallHandler.java:54)
at lipermi.handler.CallHandler.exportObject(CallHandler.java:48)
at control.RMIServer.createServer(RMIServer.java:26)
at control.Main.main(Main.java:17)
我不明白我做错了什么

RMIServer.java

public class RMIServer implements ServerInt{
    private static final long serialVersionUID = 1L;
    private ArrayList<String> list;

    public RMIServer()  {
    list = new ArrayList<String>();
        list.add("50:25:5:-1");
        list.add("99:42:6:4");

        createServer();
    }

    public void createServer() {
        try {
            CallHandler callHandler = new CallHandler();
            callHandler.registerGlobal(ServerInt.class, this);
            callHandler.exportObject(ServerInt.class, list);
            Server server = new Server();
            server.bind(7777, callHandler);

            server.addServerListener(new IServerListener() {

                @Override
                public void clientDisconnected(Socket socket) {}

                @Override
                public void clientConnected(Socket socket) {}
            });

        } catch (LipeRMIException | IOException e) {
            e.printStackTrace();
        }    
    }


    @Override
    public ArrayList<String> getPWMLines() {       
        return list;
    }   
}
import java.util.ArrayList;

public interface ServerInt{          
    public ArrayList<String> getPWMLines();   
}
公共类RMIServer实现ServerInt{
私有静态最终长serialVersionUID=1L;
私有数组列表;
公共服务器(){
列表=新的ArrayList();
添加(“50:25:5:-1”);
添加(“99:42:6:4”);
createServer();
}
public void createServer(){
试一试{
CallHandler CallHandler=新的CallHandler();
registerGlobal(ServerInt.class,this);
exportObject(ServerInt.class,list);
服务器=新服务器();
bind(7777,callHandler);
addServerListener(新的IServerListener(){
@凌驾
public void clientDisconnected(套接字){}
@凌驾
public void clientConnected(套接字){}
});
}捕获(LipeRMIException | IOE异常){
e、 printStackTrace();
}    
}
@凌驾
公共阵列列表getPWMLines(){
退货清单;
}   
}
ServerInt.java

public class RMIServer implements ServerInt{
    private static final long serialVersionUID = 1L;
    private ArrayList<String> list;

    public RMIServer()  {
    list = new ArrayList<String>();
        list.add("50:25:5:-1");
        list.add("99:42:6:4");

        createServer();
    }

    public void createServer() {
        try {
            CallHandler callHandler = new CallHandler();
            callHandler.registerGlobal(ServerInt.class, this);
            callHandler.exportObject(ServerInt.class, list);
            Server server = new Server();
            server.bind(7777, callHandler);

            server.addServerListener(new IServerListener() {

                @Override
                public void clientDisconnected(Socket socket) {}

                @Override
                public void clientConnected(Socket socket) {}
            });

        } catch (LipeRMIException | IOException e) {
            e.printStackTrace();
        }    
    }


    @Override
    public ArrayList<String> getPWMLines() {       
        return list;
    }   
}
import java.util.ArrayList;

public interface ServerInt{          
    public ArrayList<String> getPWMLines();   
}
import java.util.ArrayList;
公共接口ServerInt{
公共阵列列表getPWMLines();
}

您显然误用了方法
CallHandler#exportObject(类,对象)
第一个参数必须是表示接口的类,第二个参数必须是实现此接口的类的实例。这里您提供了一个
ArrayList
作为第二个参数,它显然不是
ServerInt
的实例,这就是为什么会出现此异常

下面是如何使用此方法的一个很好的示例:

MyRemoteListener listenerImplementation = new MyRemoteListenerImpl();
callHandler.exportObject(MyRemoteListener.class, listenerImplementation);
在这种情况下,第一个参数是接口
MyRemoteListener
,第二个参数是接口
MyRemoteListenerImpl
的一个实例,它是接口
MyRemoteListener
的实现



要公开您的
列表
您可以尝试
callHandler.registerGlobal(List.class,List)

您显然误用了方法
callHandler\exportObject(class,Object)
第一个参数必须是表示接口的类,第二个参数必须是实现此接口的类的实例。这里您提供了一个
ArrayList
作为第二个参数,它显然不是
ServerInt
的实例,这就是为什么会出现此异常

下面是如何使用此方法的一个很好的示例:

MyRemoteListener listenerImplementation = new MyRemoteListenerImpl();
callHandler.exportObject(MyRemoteListener.class, listenerImplementation);
在这种情况下,第一个参数是接口
MyRemoteListener
,第二个参数是接口
MyRemoteListenerImpl
的一个实例,它是接口
MyRemoteListener
的实现



要公开您的
列表
,您可以尝试
callHandler.registerGlobal(List.class,List)

谢谢您的提示:)但是我如何导出ArrayList呢?@JasOn您不能。您必须导出
RMIServer
对象。@EJP也尝试过,但每次我尝试获取ArrayList时,我的应用程序都会崩溃:/现在与您的建议配合得很好,谢谢您的帮助谢谢您的提示:)但是我如何导出ArrayList呢?@JasOn您不能。您必须导出
RMIServer
对象。@EJP也尝试过,但每次我尝试获取ArrayList时,我的应用程序都会崩溃:/n现在您的建议很好,谢谢您的帮助