PhoneGap Parameterübergabe von Javaklasse an index.html

  • Antworten:18
  • OffenNicht stickyBentwortet
  • Forum-Beiträge: 9

27.05.2014, 16:08:25 via Website

Hallo zusammen,

ich habe folgendes Problem.
Ich frage in der Java Klasse Datenbankzugriff.java Werte aus einer MySQL Datenbank (welche in der Cloud ist) ab.
Diese Werte möchte ich nun in der index.html Datei verwenden, es handelt sich hierbei um ein String Array.

String Array:
kunden[i][j]

i = Anzahl der Datensätze (Tupel)
j = Anzahl der Attribute

Leider habe ich keine Ahnung wie ich dies bewerkstelligen soll, da ich in PhoneGap, .js und .html noch Neuling bin.

Vielen Dank im Vorraus

Stefan

PS: Ich arbeite mit Eclipse und dem PhoneGap PlugIn welches mir die Ordnerstruktur automatisch generiert.

— geändert am 27.05.2014, 16:09:58

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.183

27.05.2014, 20:46:10 via App

wenn du noch neulng bist ist sowas etwas schwieriger zu verstehen.
Aber erstmal eine gegenfrage: Wieso fängst du überhaupt mit PhonGap an und programmier native java?
Damit geht es zwar auch net einfacher ist aber vom prinzip her besser.
Also zudeiner Frage: Du musst nun das Array der db dem javascript mitteilen.
Dies würde in native java besser funktionieren

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 9

28.05.2014, 00:31:00 via Website

Ich habe mir lange überlegt, womit ich eine App programmieren will.
Durch mein Studium kann ich Java programmieren (C# habe ich mir selbst beigebracht).
Mit Java programmiert man Android Apps, Mit C# Windows Phone Apps.
Aber ich würde gerne einen Crosscompiler nutzen, womit ich in einer gewohnten Sprache für alle anderen Smartphone Betriebssysteme vor allem auch iPhone Apps programmieren kann.
Nach langer und reichlicher Recherche bin ich auf PhoneGap gestoßen.
Der riesige Vorteil von PhoneGap für mich ist, dass ich quasi nativ programmieren kann.
Ich weiß, dass ich nicht den leichtesten Weg gewählt habe, aber ich denke vorausschauend, daher ist PhoneGap für mich der elegantere Weg.
Die Benutzeroberfläche programmiere ich in html und die ganze Logik in gewohnten Java Umfeld.
Leider sind die Schnittstellen zwischen Benutzeroberfläche und Logik sehr mangelhaft im Netz erklärt.
Meine Benutzeroberfläche ist schon fertig, und die Datenbankanbindung funktioniert auch.
Lediglich die Wertübergabe von dem Array aus der Java Klasse in die index.html ist mein Problem.
Mit ein bisschen Code wäre mir schon geholfen, wie ich aus der index.html mittels javascript an die GetterMethode komme und den Wert speichere.

Projektpfad: Src/rosis/app/Datenbankzugriff.java
Methode: getKunden() // gibt mir per return das Stringarray zurück

Danke im Voraus

Stefan

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.183

28.05.2014, 13:29:40 via Website

Jetzt heisst es einen Weg für die Arrayübergabe zu JS zu finden. Zb über einen Temporeären file.
Oder du nutzt ein Framework wie Delphi mit deisem Kostempflichtigen Tool kannst du eine apps in alle Platformen umsetzt.Ob das dir alledeings das Wert ist, inst ne andere Sache.
Hier mal der link dazu: https://www.embarcadero.com/de/products/delphi/android-app-development

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 9

28.05.2014, 15:03:11 via Website

Dann bevorzuge ich doch den kostenlosen Weg :-)
Ich habe jetzt eine Temp Datei in Java erzeugt, welche ein einfaches String Array aufnimmt.

PrintWriter pWriter = null;
    try 
    {
        pWriter = new PrintWriter(new BufferedWriter(new FileWriter(''kundendaten.txt'')));

        for(int i=0; i<kundenarr.length; i++)
        {
            pWriter.println(kundenarr[i]);
        }
    } 
    catch (IOException e) 
    {
        e.printStackTrace();
    } 
    finally 
    {
        if (pWriter != null)
        {
            pWriter.flush();
            pWriter.close();
        }
    }

wie kann ich denn jetzt von JS auf die Tempdatei "kundendaten.txt" zugreifen?

Danke Stefan

PS: ich habe folgendes noch gefunden "android.webkit.JavascriptInterface" , kann ich dies verwenden, oder gibt es später beim comilieren auf andere Systeme probleme?

— geändert am 03.06.2014, 15:54:11

Antworten
  • Forum-Beiträge: 9

02.06.2014, 16:17:29 via Website

Ich habe jetzt mir meinen Code genauer unter die Lupe genommen und herausgefunden, dass das Testfile garnicht erstellt wird.
Sobald das FileWriter Objekt erzeugt werden soll, springt der Debugger in den Catch Block.
Als Fehlermeldung wird mir "ENOENT no such file or directory" gemeldet.
Anscheinend ist das eine Android oder Phonegap spezifisches Problem :-(
Woran kann das liegen?
Und wie kann ich das beheben?

Vielen Dank im Vorraus

Stefan

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.183

02.06.2014, 17:32:12 via Website

poste mal deinen File Write Code

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 9

03.06.2014, 15:50:47 via Website

Hier der Code:

File f = new File( ''C://workspace//AD-Map-App//src//rosi//app//kundendaten.txt'' );

FileWriter fw = new FileWriter (f);       // hier tritt der Fehler auf! 
BufferedWriter bw = new BufferedWriter (fw);    
pWriter = new PrintWriter (bw); 

Die Textdatei habe ich manuell erstellt.

Aber selbst wenn ich die Text datei aus dem Programm erstellen möchte, mit ...

File f = new File(''C://workspace//AD-Map-App//src//rosi//app//kundendaten1.txt'' ) ;
if(!f.exists())
{
    f.createNewFile();             // hier tritt der Fehler auf! 
}
FileWriter fw = new FileWriter (f);
BufferedWriter bw = new BufferedWriter (fw);    
pWriter = new PrintWriter (bw); 

springt das Programm in den Catch Block rein.

Die Exakte Fehlermeldung ist:
libcore.io.ErrnoException: open faild: ENOENT no such file or directory

Kann es was mit der Verzeichnisstruktur zu tun haben, da ein Smartphone eine andere Verzeichnisstruktur hat?

Vielen Dank

Stefan

— geändert am 03.06.2014, 15:53:30

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.183

03.06.2014, 16:32:41 via Website

Ich dir das nicht aufgefallen, ein Smartphone hat keine C-Platte :(
Entweder du Platzierst die Datei im Dateisystem oder im einem Asset Orden womit du mit dem Asset Manager etc. zugriff hast.
Beim internal Storage brauchst du eine Berechtigung

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 9

04.06.2014, 14:12:03 via Website

Ich habe jetzt folgendes probiert, aber es funktioniert leider trotzdem nicht :-(

File f = new File(Environment.getDataDirectory().toString() + ''/'' + ''android_asset/www/kundendaten.txt'');
if(!f.exists())
{
      f.createNewFile();
}
FileWriter fw = new FileWriter (f);

Es erscheint jedesmal die selbe Fehlermeldung mit ENOENT.
Hast du vlt. Beispielcode wie man eine Datei in den Assets Ordner ablegt / drauf zu greift?

Antworten
  • Forum-Beiträge: 9

04.06.2014, 22:09:01 via Website

Mist, aber was für Möglichkeiten habe ich denn, Werte zu übergeben?
Oder anders gefragt, wie kann ich dieses Problem was ich habe, PhoneGap like übergehen?
Wie macht man es eleganter?

Hintergrund. In meiner Java Klasse greife ich auf Daten, die auf einer MySQL Datenbank (im Netz, nicht lokal) liegen zu.
Oder soll ich besser die DB Anfrage in der index.html machen?
Ich hatte dies versucht zu umgehen, da ich in JavaScript neu bin.

Vielen Dank Stefan

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.183

05.06.2014, 06:30:58 via App

Also am einfachsten ist es die db mit javascript zu lesen

Vlt gibt es ja von phonegap aus dafüreine lösuch zb füllen jvon javascript aus einer java datei.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 9

05.06.2014, 10:05:44 via Website

Ich habe im Netz gelesen, dass man mit JS keinen Datenbankzugriff bekommt, dies sollte man mit PHP machen, aber mit PhoneGap kann man kein keine PHP programmieren. (siehe PhoneGap FAQ)
Ich habe gelesen, dass man mit einem JSON String Daten übermitteln kann. Ist das in meinem Fall sinnvoll / möglich?
Oder soll ich die kundendaten.txt auf einem Webserver platzieren und updaten und in die index.html liest diese Datei vom Webserver aus.
Gibt es nicht eine elegante Lösung von PhoneGap wie man Daten übermittelt ode speichern kann?

Danke Stefan

Antworten
  • Forum-Beiträge: 359

05.06.2014, 13:15:11 via Website

Du musst native App entwicklung und webenticklung unterscheiden.
Bei Webentwicklung ist das richtig, das du mit Javascript nicht auf DB zugreifen kannst (kann schon teoretisch aber sollte man nicht machen).
Bei Nativer app entwicklung läuft alles auf einer Maschine somit müsstest du eigentlich auf die SQLite DB vom Android gerät zugreifen können.
Jedoch wie du das machst kann ich dir nicht sagen da ich mit Phonegap nix am Hut hab

Antworten
  • Forum-Beiträge: 9

05.06.2014, 14:33:40 via Website

Ich werde es jetzt wiefolgt machen:

Ich erstelle ein Script oder ein Webservice, welches auf dem Server liegt. Dieses macht die Datenbank abfragen und sendet einen JSON String zurück, mit den gewünschten Werten.

Dieses Script rufe ich aus meiner index.html auf und wird dort direkt verarbeitet.

Aber ich muss schon sagen, dass ich PhoneGap schon ziemlich ernüchternd finde, dass Parameterübergaben nicht möglich sind :-(

PS:
Dieser Thread kann geschlossen werden.

Antworten
  • Forum-Beiträge: 19

31.07.2014, 15:54:07 via Website

Stefan Rosenzweig

Ich werde es jetzt wiefolgt machen:

Ich erstelle ein Script oder ein Webservice, welches auf dem Server liegt. Dieses macht die Datenbank abfragen und sendet einen JSON String zurück, mit den gewünschten Werten.

Dieses Script rufe ich aus meiner index.html auf und wird dort direkt verarbeitet.

Aber ich muss schon sagen, dass ich PhoneGap schon ziemlich ernüchternd finde, dass Parameterübergaben nicht möglich sind :-(

PS:
Dieser Thread kann geschlossen werden.

Genau so hätte ich es dir auch vorgeschlagen :) Wäre super wenn du berichtest, ob es gut geklappt hat.

Grüße,
Micha

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.183

02.08.2014, 21:56:53 via Website

@Stefan: Deswgen mag ich PhoneGap + Appbaukästen etc. nicht, sie schränken sehr in der Funktionalität ein.
Da programmiere ich lieber Java :)

— geändert am 02.08.2014, 21:57:12

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten

Empfohlene Artikel