Ist der Standardweg RPCs in Android zu nutzen AIDL?

  • Antworten:22
  • Bentwortet
bubi dubi
  • Forum-Beiträge: 73

19.04.2012, 22:13:12 via Website

Ist der Standardweg RPCs in Android zu nutzen, AIDL, ohne zusätzliche Bibliotheken zu verwenden?

Es gibt ja noch eine Menge anderer Möglichkeiten Daten auszutauschen (REST, JSON, XML-RPC, SOAP), aber sie alle erfordern meines Wissens zusätzliche Bibliotheken, die ich für meine momentanes Projekt vermeiden möchte.

Antworten
Markus B.
  • Forum-Beiträge: 636

20.04.2012, 00:43:07 via App

Hi, erläutere doch mal was du in etwa machen möchtest. Dann kann dir sicher weiter geholfen werden.

AIDL wird z.B. für die RCPs in remote Services genutzt.

Für REST und XML Verarbeitung bringt Android alles mit. Wenn du keine zusätzliche lib für RCPs nutzten willst kannst du die drei nötigen revlection Methode auch selber schreiben.

Gruß,
Markus

Antworten
bubi dubi
  • Forum-Beiträge: 73

20.04.2012, 08:10:47 via Website

Ich versuche gerade mit Android warm zu werden und habe die einfachen Funktionen soweit schon mal durchgetestet, die ich von Java her auch kenne.

Jetzt möchte ich einen Schritt weiter gehen und einen kleinen Java Server den ich mal gebastelt habe, an Android anbinden.
Der Server selber nutzt SIMON, eine objektbasiertes RPC Bibliothek.
Ich möchte mit der "Standard"-Methode von Android diesen Server nutzen können.
Also Client auf dem Gerät, der per Netzwerk sich vom Server die Informationen holt.
Daher die Frage, ist AIDL der offizielle Weg, so wie es von Google gedacht ist.
Und kann man das überhaupt mischen.

Wenn du schreibst, REST und XML Verarbeitung hat Android bereits für RPC, hast du mal ein Beispiel dafür. Link oder Tutorial?
Bzw. ist das auch ein offizieller Weg, der so in Android vorgesehen ist?
Ich habe immer etwas zu AIDL gefunden. Während die anderen Sachen immer nur angedeutet wurden.

Antworten
Markus B.
  • Forum-Beiträge: 636

20.04.2012, 09:12:31 via App

Hi, wie arbeitet denn dein Java Server ( http / Socket / web-socket) ?
Je nachdem kannst du halt eine Technik nehmen. Ich persönlich mag in der http Ebene Kommunikation per json. Das ist auch ein legitieme Möglichkeit in der Android-Welt.
Es kommt hier nicht auf den Android Standard an. Ich wüsste auch nicht das es dort einen gibt. Entscheidend ist was du hast, wo einfach deine Vorlieben liegen und was Android dir bietet.
Solltest du etwas per http machen wollen kannst du hier im Forum und im Web eine Fülle an Informationen finden.

Gruß,
Markus

Antworten
bubi dubi
  • Forum-Beiträge: 73

20.04.2012, 10:04:08 via Website

Genau das ist ja der springende Punkt. Was bietet mir Android ohne zusätzliche Bibliotheken?
Es ist zwar viel möglich, ich möchte aber eben wissen, was der eigentlich von Google vorgesehne Weg ist.
Im Normalfall gibt es auf jeder Plattform zumindest einen empfohlenen Weg.
Ob man den nimmt ist eine andere Frage.

JSON gibt es aber nicht von Hause aus in Android, oder?
Zumindest was ich gelesen habe, muss wieder basteln.

Antworten
bubi dubi
  • Forum-Beiträge: 73

20.04.2012, 10:30:50 via Website

Ich nehm alles zurück.
Google Suche bringt doch nicht immer das gewünschte Ergebnis.
Bin immer wieder auf Seiten für zusätzliche Bibliotheken gelandet. Und hier und da die Aussage dass es nur so gehen würde.

Aber back to topic.
Suche halt eine gute Methode RPC durchzuführen.
Gibt es da nur AIDL oder hat Android noch andere Techniken ab Werk auf Lager?

Antworten
Markus B.
  • Forum-Beiträge: 636

20.04.2012, 10:43:59 via App

Hi, du kannst es mit AIDL machen. Nun wiederhole ich mich wieder :-)
Du kannst es auch via Json- oder XML-RPC machen. Android liefert dir alle notwendigen Basis-Klassen, welche du für diese Techniken brauchst.
Dafür findest du auch libs, welche auf den Basis-Klassen basieren. Wenn du das nicht möchtest fängst du halt selber an diese zu implementieren.

Gruß,
Markus

Antworten
bubi dubi
  • Forum-Beiträge: 73

20.04.2012, 14:03:38 via Website

Wir halten also fest, es gibt keine Standardmethode. Man wählt selber seine Waffen.

Dann frage ich mal anders. Wir legen einfach mal alles beiseite.
Ich möchte zwischen einem Android Gerät und einem normalen Windows PC mit Java, Daten austauschen.
In meinem Fall sollen diese Daten Objekte sein, die ich am Windows PC oder am Android direkt weiterverwenden kann.
Was wäre das vorzuziehende Verfahren, damit es auf beiden Seiten reibungslos funktioniert?
Und gibt es ein paar Tutorials die beide Seiten beleuchten?

— geändert am 20.04.2012, 14:04:05

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

20.04.2012, 14:25:41 via Website

Objekte direkt verwenden klingt immer so nach Serialisierung, aber davon würde ich echt Abstand nehmen.
Das macht unnötig viel Stress mit der Kompatibilität von Klassen und vor allem sind die Daten nicht lesbar.
Wenn die Objekte nur Container für recht einfache Daten sind, würde ich die immer in ein lesbares Format wie JSON speichern, übertragen und die Felder auf dem Client wieder in Objekte kopieren.

— geändert am 20.04.2012, 14:26:08

Antworten
bubi dubi
  • Forum-Beiträge: 73

20.04.2012, 14:47:10 via Website

Die Daten sind eigentlich nur Datenfelder eines Objektes.
Also z.B.:
Name: Hans
Nachname: Wurst
Straße: .... etc pp
Die stecken halt in einem Objekt "Benutzer" oder sowas.
Das Objekt wird z.B. später auch als XML gespeichert.

Ich möchte es halt so haben, ich fordere vom Server (Java) über den Android Client Informationen an. Der Server sammelt die Informationen in einem Objekt, zerlegt dieses, schickt es dem Client, der bastelt sich wieder das Objekt.
So die grobe Vorstellung.
Da ich noch nicht mit JSON in Berührung gekommen bin, wäre ein Tutorial für Java bzw. Android ganz nützlich.
Beide Welten müssten sich doch eigentlich vereinen lassen.

Frage am Rande:
Kann man eigentlich auch Dateien per JSON transportieren?

— geändert am 20.04.2012, 15:07:28

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

20.04.2012, 14:56:24 via Website

na dann einfach die daten per xml oder json verschicken

mit android parsen und in objekte wandeln. dafür gibts 100te tutorials und wird häufig so gemacht

swordiApps Blog - Website

Antworten
Florian B.
  • Forum-Beiträge: 284

20.04.2012, 15:04:54 via Website

JSON ist nur ein Format wie Daten in einem String strukturiert werden können. Du kannst es mit XML vergleichen, das gibt dir auch nur vor, wie Daten strukturiert werden können/sollen. Wenn du eine Datei in ein JSON Dokument packen willst, dann musst du die Datei serialisieren, sodass du einen String bekommst, den du dann im JSON Dokument ablegen kannst.

Übertragen kannst du ein JSON-Dokument dann z.b. via Http oder was auch immer.

Antworten
bubi dubi
  • Forum-Beiträge: 73

20.04.2012, 15:09:40 via Website

Ich verstehe JSON momentan so, dass der Empfänger, der die Daten haben möchte, einfach nur Informationen abruft, die bereits statisch in der Quelle vorhanden sind.
Ich möchte aber den Punkt verstehen, wie ich ala RPC, dem Server mitteilen kann, dass er erst Daten sammeln soll und diese dann an mich verschickt/übergibt.
Die Tutorials die überflogen habe berücksichtigen das nicht.

— geändert am 20.04.2012, 15:10:15

Antworten
Florian B.
  • Forum-Beiträge: 284

20.04.2012, 18:20:54 via Website

Die große Frage ist glaub ich eher, was du unter RPC verstehst. RPC heisst ja erst mal nur, dass man Methode in einem anderen Prozess aufruft, und der der Prozess dabei auf dem gleichen System oder auf einem ganz anderen Rechner läuft. Wie das genau passiert ist aber mit dem Ausdruck RPC nicht fest gelegt.

Und AIDL (Android Interface Definition Language) wird dir da auch nicht weiterhelfen, dabei geht es ja nur darum zwischen verschiedenen Android Prozessen zu kommunizieren. Das benötigt Otto-Normal-Entwickler aber in der Regel nicht so wirklich oft.

Vielleicht erklärst du uns einfach mal dein Szenario, dann kann man dir vielleicht besser helfen, wie du dein Problem am besten löst.

Ich sag mal so, um Daten mit einem Server aus zu tauschen, gehen die meisten den Weg über Webservices, die via HTTP angesprochen werden. Dazu muss dein Server natürlich einen Webservice mit den benötigten Funktionen anbieten.

Antworten
Markus B.
  • Forum-Beiträge: 636

21.04.2012, 00:33:07 via Website

Hi,
also JSON hat nichts mit statischen Daten zutun, welche dann auch noch im Quelltext stehen. JSON-Strings werden üblicherweise zur Laufzeit erzeugt und als Quelle dient z.B. eine Datenbank. Der User sendet einen Request an einen Server z.B. http://www.example.com/get/mydata und daraufhin wir dann ein JSON-String erzeugt und per Response zurückgegeben.
Wie geht das nun mit RPC. Im Prinzip genau auf dem eben beschriebenen weg. Du sendest einen Request an den Server, welcher z.B. wie folgt aussehen kann:

1{
2 "method":"sammelDaten",
3 "params":{
4 "id":"12345"
5 }
6}

Nun liegt es am deinen Server beim Erhalten eines solchen Requests die Methode "sammelDaten" aufzurufen und diese dann per Response wieder an das Android-Gerät zu schicken. Das machst du auf der Serverseite einfach mit Annotations und der Reflection API.
Das ist eigentlich eine ziemlich einfach Geschichte.

Gruß,
Markus

— geändert am 21.04.2012, 00:34:15

Antworten
bubi dubi
  • Forum-Beiträge: 73

22.04.2012, 15:40:48 via Website

Ich habe mir mal einen kleinen Test gebastelt.
Habe aber jetzt ein anderes Problem, ich weiss nicht welche IP Adresse mein Server aus der Android Emulation hat.
Das emulierte Geräte selbst hat 10.0.2.15.
Wie kriege ich aber jetzt raus, welche IP mein lokal laufender Server unter Windows, gegenüber dem Android Gerät hat?
Unter Windows hat mein Server 192.168.10.125.
Das kann das Android logischerweise aber nicht finden.

Im Manifest ist die Permission für Internet eingetragen.
1<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" ></uses-permission>
2<uses-permission android:name="android.permission.INTERNET"></uses-permission>
Sicherheitshalber einfach mal beides eingetragen.

Antworten
bubi dubi
  • Forum-Beiträge: 73

22.04.2012, 16:45:50 via Website

Haut bei mir nicht hin.
Ich kann in der Emulation die Befehle nicht eingeben. Sobald ich irgend etwas versuche unter Tools anzuwählen, um ans Terminal zu gelangen, stirbt der Emulator.
Bedienung ist im Emulator ohnehin unter aller Kanone. Reaktionszeiten unter 10 Sekunden sind nicht drin.

Weiss jemand ob ein echtes Gerät beim IP Management sich von Haus aus besser verhält?
Der Emulator hat auf das Host System so keinen Zugriff.
Ein echtes Gerät per USB schon?
Zumindest wie testet ihr lokale Netzwerkzugriffe?

Antworten
Markus B.
  • Forum-Beiträge: 636

22.04.2012, 16:49:23 via Website

Hi,
also wenn du auf deinem Rechner z.B. einen Webserver auf Port 80 am laufen hast kannst du diesen über 10.0.2.2 erreichen.
Damit hatte ich noch nie Probleme.

Gruß,
Markus

Antworten
bubi dubi
  • Forum-Beiträge: 73

22.04.2012, 17:32:13 via Website

Habe meinem mal den Port 80 vergeben, hat leider nichts gebracht.

Antworten
bubi dubi
  • Forum-Beiträge: 73

22.04.2012, 21:06:35 via Website

Ich mach mal einen neuen Thread auf.
Das Thema schweift ab und die Probleme liegen jetzt an anderer Stelle.

Ergebnis bisher:
AIDL ist nicht der Standardweg. Den gibt es nicht.
Sehr beliebt ist aber JSON über REST z.B. zu verwenden.

Antworten