2012-12-09 5 views
9

私はこの問題について多くのスレッドを読んできましたが、実際の解決策は見当たりませんでした。AndroidアプリケーションでJAVA RMIを使用する

私はJavaプロジェクトを作成しました。これはrmiサーバーであり、私はrmiクライアントでもあると思われるAndroidアプリケーションを持っています。

サーバが動作しているかどうかをチェックすると、私はアンドロイドプロジェクトでクライアントをテストするほど賢明ではなかったし、単純なJavaプロジェクトでテストクライアントを作った。

私はアンドロイドプロジェクトが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にいくつかあります。あなたはまた、ここでは次のライブラリLipeRMI

を使用することができます

6

はLipeRMI経由のJava Serverとの相互作用のAndroidクライアントの一例です。 次の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(); 
    } 
} 

のAndroidクライアント:

//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ライブラリを追加
あなたは
も作るのAndroidプロジェクトでINTERNET権限を追加していることを確認してくださいあなたが置かれTestService.javaファイルを持っていることを確認例えば、両方の場所で同じパッケージ名。 test.common package here
Android MainActivity.javaのserverIP変数の値を、Javaコードを実行しているマシンのIPに変更します。

+0

問題を解決するための詳細情報を提供してくださいライブラリへのリンクだけでなく、 – slfan

+0

こんにちは@Abhilash!あなたはまだLipeRMIを使いますか?もしそうなら、あなたはそれまで日付までにどんな困難に直面しましたか? –

0

AndroidはRMIをサポートしていません。あなたは、ソケットまたは生のTCP通信に変更する必要があります。

関連する問題