使用LipeRMI的Android应用程序正在连接到服务器但未调用该方法

时间:2016-01-20 17:30:11

标签: java android rmi

我有一个Android应用程序和一个服务器,都使用lipeRMI。 我的Android应用程序成功连接到服务器。但它应该调用的方法没有被调用。

服务器代码:

public interface TestService {

public String getResponse(String data);
}

public class TestServer implements TestService {
public TestServer() {
    try {
        CallHandler callHandler = new CallHandler();
        callHandler.registerGlobal(TestService.class, this);
        Server server = new Server();
        server.bind(7777, callHandler);
        server.addServerListener(new IServerListener() {

            @Override
            public void clientDisconnected(Socket socket) {
                System.out.println("Client Disconnected: " + socket.getInetAddress());
            }

            @Override
            public void clientConnected(Socket socket) {
                System.out.println("Client Connected: " + socket.getInetAddress());
            }
        });
        System.out.println("Server Listening");
    } catch (LipeRMIException | IOException e) {
        e.printStackTrace();
    }
}

@Override
public String getResponse(String data) {
    System.out.println("getResponse called");
    return "Your data: " + data;
}

public static void main(String[] args) {
    TestServer testServer = new TestServer();
}

}

android代码:

interface TestService {

public String getResponse(String data);
}

public class MainActivity extends Activity {

private String serverIP = "192.168.1.7";
EditText et= null;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button btnGet = (Button) findViewById(R.id.button1);
    et= (EditText)findViewById(R.id.editText2);
    btnGet.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            new Conn().execute();
        }
    });

}
class Conn extends AsyncTask<Void, Void, MainActivity> {

    @Override
    protected MainActivity doInBackground(Void... params) {
        Looper.prepare();

        try {
            Toast.makeText(MainActivity.this, "Inside conn my nigga", Toast.LENGTH_SHORT).show();
            CallHandler callHandler = new CallHandler();
            Client client = new Client(serverIP, 7777, callHandler);
            TestService testService = (TestService) client.getGlobal(TestService.class);
            String msg = testService.getResponse("qwe");
            //Toast.makeText(MainActivity.this, testService.getResponse("abc"), Toast.LENGTH_SHORT).show();
            Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
            client.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        Looper.loop();
        return null;
    }

}
}

我尝试使用上面的代码也使用一个简单的Runnable线程而不是AsyncTask(我是偏执的AsyncTask会导致问题)但是它徒劳无功。

服务器提供此输出:

Server Listening
Client Connected: /192.168.1.5
Client Disconnected: /192.168.1.5

无论我多少次点击我的Android应用程序的Button1。 任何帮助将非常感激。 :) 谢谢你的时间!

1 个答案:

答案 0 :(得分:0)

当包装不同时我遇到了这种情况。您应该确保Android应用程序和服务器上的TestService个包是相同的。 如果您在TestService界面中使用自己的类,它应该也有相同的包,并且应该实现Serializable