Bạn cũng có thể sử dụng thư viện sau LipeRMI
Dưới đây là một ví dụ về một khách hàng Android tương tác với Java Server qua LipeRMI. Tạo 2 lớp sau và một giao diện cho ứng dụng Java.
//TestService.java
package test.common;
public interface TestService {
public String getResponse(String data);
}
//TestServer.java
import java.io.IOException;
import java.net.Socket;
import test.common.TestService;
import lipermi.exception.LipeRMIException;
import lipermi.handler.CallHandler;
import lipermi.net.IServerListener;
import lipermi.net.Server;
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;
}
}
//TestMain.java
public class TestMain {
public static void main(String[] args) {
TestServer testServer = new TestServer();
}
}
Android khách hàng:
//MainActivity.java
package com.example.lipermidemoandroidclient;
import java.io.IOException;
import test.common.TestService;
import lipermi.handler.CallHandler;
import lipermi.net.Client;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Looper;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {
private String serverIP = "192.168.1.231";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnGet = (Button) findViewById(R.id.btnGet);
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 {
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;
}
}
}
//TestService.java
package test.common;
public interface TestService {
public String getResponse(String data);
}
Thêm thư viện LipeRMI cho cả dự án
Hãy chắc chắn rằng bạn thêm sự cho phép INTERNET trong dự án Android
Ngoài ra hãy chắc chắn rằng bạn có các tập tin TestService.java đặt trong cùng một tên gói ở cả hai vị trí cho ví dụ. gói test.common tại đây
Cũng thay đổi giá trị của biến serverIP trong Android MainActivity.java thành IP của máy chạy mã Java.
Tôi nghĩ rằng thư viện mà bạn đang sử dụng không hỗ trợ valvik vm. –
thêm về điều này là ở đây: -http: //stackoverflow.com/questions/5321906/how-to-find-the-jar-of-java-rmi-package –
Tôi đã trả lời câu hỏi tương tự tại ngăn xếp này [bài đăng] http://stackoverflow.com/questions/5900157/is-it-possible-to-import-java-rmi-in-android/24943260#24943260), hãy khám phá nếu bạn thích –