2012-12-09 12 views
9

मैंने इस मुद्दे के बारे में बहुत सारे धागे पढ़े हैं, और मैं इसके लिए 'वास्तविक' समाधान नहीं देख सका।एंड्रॉइड एप्लिकेशन में जावा आरएमआई का उपयोग

मैंने एक जावा प्रोजेक्ट बनाया - जो एक आरएमआई सर्वर है और मेरे पास एंड्रॉइड एप्लिकेशन है जो कि आरएमआई क्लाइंट भी है।

जब मैंने जांच की कि सर्वर काम करता है तो मैं एंड्रॉइड प्रोजेक्ट पर क्लाइंट का परीक्षण करने के लिए पर्याप्त बुद्धिमान नहीं था और मैंने एक साधारण जावा प्रोजेक्ट पर टेस्ट क्लाइंट बनाया।

अब जब मैं अपने एंड्रॉइड एप्लिकेशन को सर्वर से कनेक्ट करने की कोशिश कर रहा हूं तो मैं असफल रहा क्योंकि एंड्रॉइड प्रोजेक्ट जावा आरएमआई पैकेज को नहीं पहचानता है।

ऐसा क्यों होता है? मुझे क्या करना चाहिए?

+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 को समझ सकता हूं दुर्भाग्यवश एंड्रॉइड के साथ नहीं आता है और इसलिए इसका उपयोग करना संभव नहीं है।

हालांकि this पोस्ट में कुछ और विवाद हैं।

6

आप निम्न पुस्तकालय LipeRMI

यहाँ उपयोग कर सकते हैं एक Android ग्राहक LipeRMI के माध्यम से जावा सर्वर के साथ बातचीत का एक उदाहरण है। जावा एप्लिकेशन के लिए निम्नलिखित 2 कक्षाएं और इंटरफ़ेस बनाएं।

//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 पैकेज यहाँ
एंड्रॉइड मेनएक्टिविटी.जेवा में सर्वर कोड वैरिएबल का मूल्य जावा कोड चलाने वाली मशीन के आईपी में भी बदलें।

+0

पसंद है तो इसे जांचें कृपया समस्या को हल करने के लिए अधिक जानकारी प्रदान करें न केवल लाइब्रेरी का लिंक – slfan

+0

हाय @ अहिलाश! क्या आप अभी भी LipeRMI का उपयोग करते हैं? यदि हां, तो क्या आपको आज तक किसी भी कठिनाइयों का सामना करना पड़ा है? –

0

एंड्रॉइड आरएमआई का समर्थन नहीं करता है। आपको सॉकेट या कच्चे टीसीपी संचार में बदलना चाहिए।

संबंधित मुद्दे