2012-12-09 5 views
9

이 문제에 관해 많은 스레드를 읽었으며 '실제'해결 방법을 찾을 수 없었습니다.Android 응용 프로그램에서 JAVA RMI 사용

저는 자바 프로젝트를 만들었습니다.이 프로젝트는 rmi 서버이고 rmi 클라이언트로 생각되는 안드로이드 애플리케이션이 있습니다.

서버가 작동하는지 확인하면 안드로이드 프로젝트에서 클라이언트를 테스트 할만큼 현명하지 못했고 간단한 자바 프로젝트에서 테스트 클라이언트를 만들었습니다.

이제 내 안드로이드 응용 프로그램을 서버에 연결하려고 할 때 안드로이드 프로젝트가 java rmi 패키지를 인식하지 못하기 때문에 실패합니다.

왜 그런가? 나는 어떻게해야합니까?

+0

사용중인 라이브러리가 dalvik VM이 지원되지 않는다고 생각합니다. –

+0

이것에 대한 자세한 내용은 여기 : -http : //stackoverflow.com/questions/5321906/how-to-find-the-jar-of-java-rmi-package –

+0

나는이 스택에서 비슷한 질문에 대답했다. http://stackoverflow.com/questions/5900157/is-it-possible-to-import-java-rmi-in-android/24943260#24943260) 원하는 경우 –

답변

4

동일한 문제가있어서 소켓 통신에 대한 내 통신이 변경되었습니다!

Java.rmi가 안타깝게도 Android와 함께 제공되지 않으므로 사용이 불가능합니다.

그러나 this 게시물에 더 많은 내용이 있습니다.

6

는 또한 여기에 다음과 같은 라이브러리 LipeRMI

를 사용 LipeRMI를 통해 자바 서버와 상호 작용하는 안드로이드 클라이언트의 예입니다 수 있습니다. 다음 2 가지 클래스와 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(); 
    } 
} 

안드로이드 클라이언트 :

//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); 
} 

모두 프로젝트에 LipeRMI 라이브러리를 추가
당신이
또한 만들 안드로이드 프로젝트에 인터넷 권한을 추가해야합니다 당신이 배치 TestService.java 파일이 있는지 확인 예를 들어 두 곳 모두에서 동일한 패키지 이름. test.common package here
Android MainActivity.java의 serverIP 변수 값을 Java 코드를 실행하는 시스템의 IP로 변경하십시오.

+0

을 확인해보십시오. 문제를 해결하는 방법에 대한 자세한 정보를 제공해주십시오. 라이브러리에 대한 링크가 아닌 – slfan

+0

안녕하세요 @Abhilash! 아직도 LipeRMI를 사용하고 있습니까? 그렇다면 날짜까지 문제가 있습니까? –

0

Android는 RMI를 지원하지 않습니다. 소켓 또는 원시 TCP 통신으로 변경해야합니다.