HILFE: phonegap - grundlegende Fragen zur Datenspeicherung

  • Antworten:7
Steffen
  • Forum-Beiträge: 2

07.10.2012, 15:12:22 via Website

Hallo zusammen,

ich bin neu in der Android-Programmierung und habe ein paar grundlegende Fragen zu phonegap:

Folgendes will ich machen:
Die App zeigt eine List von Liedern an. Wenn man ein Lied auswählt wird der Text angezeigt. Über Tabs kann man den Text in verschiedenen Sprachen sehen. Eigentlich nichts kompliziertes, oder?!?
ALLE Daten werden lokal gespeichert, also keine Remoteverbindungen, keine dynamischen Inhalte... auch die Übersetzungen sind schon vorab gespeichert, also keine Auto-Übersetzung.

Das ist mein Ansatz:
Ich habe mir gedacht pro Lied eine XML Datei zu speichern die alle Informationen zu dem Lied enthält, also Titel, den Text in den verschiedenen Sprachen, etc.

Folgende Probleme habe ich dabei:

  • wenn ich die Daten in assets/www/... speichere habe ich keinen Zugriff über die cordova File-API (da diese nur auf das Dateisystem(sdcard) zugreifen kann). Dateien aus dem assets/www kann ich zwar über ein XMLHTTPRequest lesen, hierfür brauche ich aber den Dateinamen. Aber wie kann ich mir alle Dateien innerhalb des Verzeichnisses auflisten lassen??
  • Wenn ich die Daten im filesystem speichere habe ich Zugriff über die File-API, muss aber erstmal die Dateien aufs Filesystem kriegen d.h. ich habe wieder das selbe Problem: wie kann ich den Inhalt aus assets/www/... auslesen bzw. aufs Filesystem kopieren??
  • Das selbe Problem habe ich mit einer Datenbank, da diese auch erstmal befüllt werden muss (ok man könnte ein Riesen skript schreiben, aber sehr elegant ist das nicht, zudem ich den Ansatz mit XML-files flexibler finde, da man leicht Dateien erweitern/hinzufügen kann).

Hat irgendjemand Erfahrungen damit und kann mir Tipps geben. Wie gesagt, Android ist total neu für mich, vll. ist dieser Ansatz ja auch einfach komplett falsch für Android?!

Dank und Gruss,
Steffen

Antworten
Christian
  • Forum-Beiträge: 307

07.10.2012, 16:39:53 via Website

Hi Steffen,

vll. ist dieser Ansatz ja auch einfach komplett falsch für Android?!
das Problem ist eher das Phonegap nicht Android ist sondern nur ein Framework zur Crossplattform-Entwicklung das mit Web-Technologien arbeitet.

Aber zu deinem Problem:
Zugriff auf Datein im www-Ordner.

Die Entwicklung für Phonegap ist die gleiche als wenn du eine Webseite erstellst. In der Regel bindet man bei Webseiten die Dateien über Pfad ein.
Beispiel:
1<img src="bilder/meinBild.jpg" />

So da du ja deine XML vor der Laufzeit des Programms erstellst, solltest du ja die Namen der einzelnen Dateien kennen. Zum auslesen kannst du dann zum Beispiel Jquery nutzten.

Beispiel:
1$(document).ready(function()
2{
3 $.ajax({
4 type: "GET",
5 url: "www/liederXML/liederl.xml",
6 dataType: "xml",
7 success: parseXml
8 });
9});

Falls du jetzt aber warum auch immer die Namen nicht kennst kannst du es ja mal mit Javascript versuchen den WWW-Ordner zu durchsuchen und dir die Dateinamen anzeigen zu lassen.

Sollte das auch nicht gehen, hast du noch die Möglichkeit dir ein Plug-In für Phonegap zu schreiben. Also eine Java Komponente die Daten ausliest und sie dann an das Javascript übergibt.

mfg Christian

— geändert am 07.10.2012, 16:45:27

Antworten
Steffen
  • Forum-Beiträge: 2

08.10.2012, 10:04:04 via Website

Hi Christian,

danke für die Antwort.
Genau das durchsuchen des lokalen Ordners ist mein Problem, Ich kenne zwar prinzipiell die Dateinamen, finde es nur nicht elegant zusätzlich zu den Dateien eine Liste mit den Namen pflegen zu müssen.
Ich sehe zwar das Problem das phonegap hauptsächlich mit javascript arbeitet (was eben keinen zugriff auf das lokale dateisystem gewährt), dachte aber nur dass phonegap evtl. trotzdem Möglichkeiten dazu bietet, immerhin bewegt man sich ja "innerhalb der eigenen app", da muss dass doch irgendwie möglich sein... ?

...bzw. wie würde man ohne phonegap (also nativ Android) auf die lokalen Dateien zugreifen?

Gruss Steffen

Antworten
Christian
  • Forum-Beiträge: 307

10.10.2012, 11:54:42 via Website

Hi Steffan,



Ich sehe zwar das Problem das phonegap hauptsächlich mit javascript arbeitet (was eben keinen zugriff auf das lokale dateisystem gewährt), dachte aber nur dass phonegap evtl. trotzdem Möglichkeiten dazu bietet, immerhin bewegt man sich ja "innerhalb der eigenen app", da muss dass doch irgendwie möglich sein... ?

Hauptsächlich ist gut, sagen wir mal eher 90% der Entwicklung geschieht mit HTML, CSS und JS. Und nur 10% betreffen wirklich Andorid.
Falls du also Android lernen möchtest, lass das Webzeug weg und mach ne native Anwendung.

So aber zurück zum eigentlichen Problem.
Also auf das lokale Dateisystem des Gerätes hast du schon per Phonegap(JS-Schnittstelle) Zugriff das Problem ist das der Assets bzw der Res-Order nicht zum Lokalen Dateisystem des Gerätes gehören. Diese Ordner sind Teil der APK auf sie kannst du nur LESEND zugreifen also eine Datei editeren oder erstellen geht nicht(jedenfalls nicht zur Laufzeit deines Programmes).

So das Problem mit JS ist das es eigentlich nicht dafür gedacht ist mit lokalen Dateien zuarbeiten. Ich hab mal ein bissel im Netz gesucht und die Workarounds die ich gefunden habe sehen irgendwie alle nach IE Hacks aus. Keine Ahnung ob diese auch in Phonegap laufen.

bzw. wie würde man ohne phonegap (also nativ Android) auf die lokalen Dateien zugreifen?
Wie schon gesagt du arbeitest nicht auf dem lokalen Dateisystem des Gerätes was du benötigst ist der Zugriff auf den Assets-Ordner.
Diesen erhältst du über den AssetManager . Aber ich glaube das dir dieser nicht so helfen wird wie du möchtest, da auch hier der Zugriff auf die Dateien per Name erfolgt.

mfg Christian

Antworten
mouradovitch roi
  • Forum-Beiträge: 3

11.08.2013, 16:49:53 via Website

hallo
ich habe eine phonegap App erstellt, die nur von registrierte Mitglieder benutzt werden kann. und dafür habe ich Ajax benutzt um die verbindung mit dem Server zu erstellen.
mein code sieht so aus

login.html
1<!DOCTYPE HTML>
2<html>
3
4<head>
5 <meta http-equiv="Content-type" content="text/html; charset=utf-8">
6 <title>Auth Demo</title>
7
8 <script type="text/javascript" charset="utf-8" src="js/cordova.js"></script>
9 <script type="text/javascript" src="js/jquery.js"></script>
10 <script type="text/javascript" src="js/jquery.mobile.js"></script>
11
12 <script type="text/javascript" charset="utf-8" src="js/main.js"></script>
13</head>
14
15
16
17<body onload="init()">
18
19<div id="loginPage" data-role="page">
20
21 <div data-role="header">
22 <h1>Aut </h1>
23 </div>
24
25 <div data-role="content">
26
27 <form id="loginForm">
28 <div data-role="fieldcontain" class="ui-hide-label">
29 <label for="username">Username:</label>
30 <input type="text" name="username" id="username" value="" placeholder="Username" />
31 </div>
32
33 <div data-role="fieldcontain" class="ui-hide-label">
34 <label for="password">Password:</label>
35 <input type="password" name="password" id="password" value="" placeholder="Password" />
36 </div>
37
38 <input type="submit" value="Login" id="submitButton">
39 </form>
40
41 </div>
42
43 <div data-role="footer">
44 <h4>Auth</h4>
45 </div>
46
47</div>
48
49</body>
50</html>


und das ist main.js
1function init() {
2 document.addEventListener("deviceready", deviceReady, true);
3 delete init;
4 }
5
6 function deviceReady() {
7
8 $("#loginForm").on("submit",function(e) {
9 //disable the button so we can't resubmit while we wait
10 $("#submitButton",this).attr("disabled","disabled");
11 var u = $("#username", this).val();
12 var p = $("#password", this).val();
13 if(u != '' && p!= '') {
14 $.post("h..p://3w.dhkasgdk.biz/dev3/ajax/phonegap/login.php", {username:u,password:p}, function(res) {
15 if(res == true) {
16 $.mobile.changePage("myApp.html");
17 } else {
18 navigator.notification.alert("Your login failed", function() {});
19 }
20 $("#submitButton").removeAttr("disabled");
21 },"json");
22 }
23 return false;
24 });
25
26 }

hat jemand eine idee !!
danke im voraus

Antworten
mouradovitch roi
  • Forum-Beiträge: 3

11.08.2013, 17:24:36 via Website

ich hab vergessen zu schreiben, dass mein code fonctioniert nicht .. und wenn jemand mir helfen kann dann wäre ich sehr dankbar

Antworten
mouradovitch roi
  • Forum-Beiträge: 3

12.08.2013, 13:42:29 via Website

hi impjor
Ich kriege die 404 error about cordova_plugin.json wenn ich teste die app

Antworten