Descargar archivos y almacenarlos localmente con Phonegap / jQuery Mobile Android y iOS Apps
Escribí una aplicación de jQuery Mobile y lo empaqué con Phonegap a iOS y aplicaciones de Android.
En este momento estoy utilizando archivos json almacenados localmente para leer datos.
- Cómo defino launchMode en AndroidManifest.xml - Uso de PhoneGap y JQM
- Escáner de código de barras zxing en una div fija en phonegap android app
- El tacto de la firma de la lona crea la edición en teléfono
- ScrollTop no funciona en móviles Android
- Desarrollo de aplicaciones para Android: java vs. jquery mobile
Me gustaría actualizar estos archivos json de vez en cuando descargando archivos json más recientes de un servidor.
¿Cómo puedo obtener el json del servidor y almacenar los archivos json en el sistema de archivos local de Android e iOS?
Saludos Johe
- jQuery evento de prensa de botón móvil lenta para procesar
- ¿Qué es jQuery Mobile ?. ¿Es capaz de crear juegos para Android?
- Jquery móvil - keydown keydown en dispositivos móviles
- Parpadeo de las listas desplegables en Android (inversa)
- JQuery indicador de actividad móvil no se muestra en android
- La forma de Córdoba no se envía o los botones no funcionan (android +4.4)
- cómo mostrar letras árabes correctamente en android usando phonegap?
- Mejores prácticas phonegap architecture
Utilice FileTransfer.download
, aquí hay un ejemplo:
function downloadFile(){ window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function onFileSystemSuccess(fileSystem) { fileSystem.root.getFile( "dummy.html", {create: true, exclusive: false}, function gotFileEntry(fileEntry) { var sPath = fileEntry.fullPath.replace("dummy.html",""); var fileTransfer = new FileTransfer(); fileEntry.remove(); fileTransfer.download( "http://www.w3.org/2011/web-apps-ws/papers/Nitobi.pdf", sPath + "theFile.pdf", function(theFile) { console.log("download complete: " + theFile.toURI()); showLink(theFile.toURI()); }, function(error) { console.log("download error source " + error.source); console.log("download error target " + error.target); console.log("upload error code: " + error.code); } ); }, fail); }, fail); }; }
Así es como lo solucioné. En primer lugar, establecer las rutas de archivo, que son diferentes para Android e iOS
var file_path; function setFilePath() { if(detectAndroid()) { file_path = "file:///android_asset/www/res/db/"; //4 Android } else { file_path = "res//db//"; //4 apache//iOS/desktop } }
A continuación, cargar los archivos JSON, que están preenvasados con la aplicación, en el almacenamiento del navegador local. Me gusta esto:
localStorage["my_json_data"] = loadJSON(file_path + "my_json_data.json"); function loadJSON(url) { return jQuery.ajax({ url : url, async : false, dataType : 'json' }).responseText; }
Si quiero actualizar mis datos. Consigo los nuevos datos de JSON del servidor y lo empujo en el almacenaje local. Si el servidor se encuentra en un dominio diferente, que es el caso la mayoría del tiempo, debe realizar una llamada JSONP (consulte los documentos de jQuery en JSONP ). Lo hice un poco como esto:
$.getJSON(my_host + 'json.php?function=' + my_json_function + '&callback=?', function (json_data) { //write to local storage localStorage["my_json_data"] = JSON.stringify(json_data); });
Puede hacerlo en una línea de código:
new FileManager().download_file('http://url','target_path',Log('downloaded success'));
Target_path: puede incluir directorio (ejemplo: dira / dirb / file.html) y los directorios se crearán recursivamente.
Puede encontrar la biblioteca para hacer esto aquí:
Mi sugerencia sería examinar la API de archivos de PhoneGap. No lo he usado yo mismo, pero debería hacer lo que buscas.
Respuesta actualizada para nuevo Córdoba
function downloadFile(url, filename, callback, callback_error) { var fileTransfer = new FileTransfer(); fileTransfer.download(url, cordova.file.dataDirectory + "cache/" + filename, function (theFile) { console.log("download complete: " + theFile.toURL()); if (callback) callback(); }, function (error) { console.log("download error source " + error.source); console.log("download error target " + error.target); console.log("upload error code: " + error.code); if (callback_error) callback_error(); } ); }
Para descargar y mostrar un archivo, siga el código de ejemplo.
Incluya el código dado justo encima de la etiqueta </head>
en su index.html
< script type = "text/javascript" charset = "utf-8" > // Wait for Cordova to load document.addEventListener("deviceready", onDeviceReady, false); // Cordova is ready function onDeviceReady() { alert("Going to start download"); downloadFile(); } function downloadFile() { window.requestFileSystem( LocalFileSystem.PERSISTENT, 0, function onFileSystemSuccess(fileSystem) { fileSystem.root.getFile( "dummy.html", { create: true, exclusive: false }, function gotFileEntry(fileEntry) { var sPath = fileEntry.fullPath.replace("dummy.html", ""); var fileTransfer = new FileTransfer(); fileEntry.remove(); fileTransfer.download( "http://www.w3.org/2011/web-apps-ws/papers/Nitobi.pdf", sPath + "theFile.pdf", function(theFile) { console.log("download complete: " + theFile.toURI()); showLink(theFile.toURI()); }, function(error) { console.log("download error source " + error.source); console.log("download error target " + error.target); console.log("upload error code: " + error.code); } ); }, fail); }, fail); } function showLink(url) { alert(url); var divEl = document.getElementById("deviceready"); var aElem = document.createElement("a"); aElem.setAttribute("target", "_blank"); aElem.setAttribute("href", url); aElem.appendChild(document.createTextNode("Ready! Click To Open.")) divEl.appendChild(aElem); } function fail(evt) { console.log(evt.target.error.code); } </script>
Refer:
- Acaba de subir la aplicación para Android: ¿Cuánto tiempo tarda en aparecer la aplicación en la búsqueda de Android Market?
- ¿Qué es WindowManager en android?