2012-12-09 14 views
9

Ho letto molte discussioni su questo problema e non ho potuto vedere una soluzione "reale" per questo.Utilizzo di JAVA RMI nell'applicazione Android

Ho creato un progetto java - che è un server rmi e ho un'applicazione Android che suppone sia anche un client rmi.

Quando ho controllato se il server funziona, non ero abbastanza saggio da testare il client su un progetto Android e ho creato un client di test su un semplice progetto java.

Ora, quando sto provando a connettere la mia applicazione Android al server, esito negativo perché il progetto Android non riconosce il pacchetto java rmi.

Perché succede? cosa dovrei fare?

+0

Penso che la libreria che si sta utilizzando non sia supportata dalvik vm. –

+0

altro su questo è qui: -http: //stackoverflow.com/questions/5321906/how-to-find-the-jar-of-java-rmi-package –

+0

Ho risposto alla domanda simile a questo stack [post] (http://stackoverflow.com/questions/5900157/is-it-possible-to-import-java-rmi-in-android/24943260#24943260), controlla se ti piace –

risposta

4

Ho avuto lo stesso problema e ho cambiato la comunicazione con la comunicazione socket!

Per quanto ho potuto immaginare Java.rmi purtroppo non viene fornito con Android e quindi non è possibile utilizzarlo.

Tuttavia ci sono alcune altre richieste nel post this.

6

è anche possibile utilizzare la seguente libreria LipeRMI

Ecco un esempio di un cliente interagisce con Android Java Server tramite LipeRMI. Creare le seguenti 2 classi e un'interfaccia per l'applicazione 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(); 
    } 
} 

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

Aggiungere la libreria LipeRMI ad entrambi i progetti
Assicurati di aggiungere l'autorizzazione INTERNET nel progetto Android
anche assicurarsi di avere il file TestService.java posto in stesso nome del pacchetto in entrambi i posti per es. pacchetto test.common qui
Modifica anche il valore della variabile serverIP in Android MainActivity.java sull'IP della macchina che esegue il codice Java.

+0

per favore fornisci maggiori informazioni per risolvere il problema non solo il link ad una libreria – slfan

+0

Ciao @Abhilash! Usi ancora LipeRMI? Se è così, hai avuto difficoltà con esso fino alla data? –

0

Android non supporta RMI. Dovresti passare al socket o alla comunicazione TCP non elaborata.