我有一个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。 任何帮助将非常感激。 :) 谢谢你的时间!
答案 0 :(得分:0)
当包装不同时我遇到了这种情况。您应该确保Android应用程序和服务器上的TestService
个包是相同的。
如果您在TestService
界面中使用自己的类,它应该也有相同的包,并且应该实现Serializable
。