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.

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

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í:

https://github.com/torrmal/cordova-simplefilemanagement

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:

  • jquery mobile events en android contra iphone
  • Phonegap + Jquery móvil en Android: varias páginas HTML Javascript no funciona
  • Etiqueta de audio en el dispositivo Android
  • ¿Por qué jQuery Mobile 1.1-rc1 utiliza un .gif para el icono de carga (de nuevo)?
  • Phonegap, conexión al servidor sin éxito
  • Convierta la aplicación móvil jQuery a apk
  • Cómo deshabilitar el botón de retroceso del teléfono en Android con Jquerymobile, PhoneGap
  • Incluya algunas páginas en una página en JQuery móvil
  • PhoneGap: caída de la aplicación que toma la imagen del retrato
  • ¿Necesito agregar app.initialize () en todos mis archivos html en un proyecto cordova / phonegap
  • JQuery Mobile: el texto de entrada enfocado no respeta el índice z, que aparece por encima de todo lo demás
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.