Autore Topic: servire un contenuto dinamico ad un WebView  (Letto 1414 volte)

Offline gigi

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG-P500
  • Sistema operativo:
    Gentoo
servire un contenuto dinamico ad un WebView
« il: 26 Luglio 2012, 16:01:23 CEST »
0
Ciao a tutti.

Avrei una esigenza ma proprio non trovo una soluzione. Vi spiego:

Ho una activity con un WebView. nell'onCreate dell'activity faccio puntare il WebView all'indirizzo "content://mia.applicazione.com/home.html" tramite il metodo loadUrl(); fin qui tutto ok.

Chiaramente ho anche un ContentProvider, il cui metodo openFile è:

Codice: [Seleziona]
    @Override
    public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
   
        Log.d(TAG, "openFile: " + uri + ", " + mode);
        return null;
   
    }

il WebView apre l'url indicato e openFile() viene richiamato correttamente; a log vedo:

Codice: [Seleziona]
D/mia.applicazione.com.MyContentProvider@40517a40(  321): openFile: content://mia.applicazione.com/home.html, r
Quindi, fin qui tutto bene.

Il mio problema è che openFile() deve ritornare un ParcelFileDescriptor che, da quello che leggo in documentazione, è un file vero e proprio. Io quello che vorrei fare è generare a codice la risposta per il browser, senza passare da un file. Vorrei poter dichiarare una stringa tipo String s = "<html><body>ciao!</body></html>" e servire questa stringa al WebView.

Come posso fare?

grazie del supporto!


Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:servire un contenuto dinamico ad un WebView
« Risposta #1 il: 26 Luglio 2012, 16:26:41 CEST »
0
Guarda, aprendo la documentazione ufficiale android...
( WebView | Android Developers )

...propongono questo codice per il caricamento diretto:
Codice (Java): [Seleziona]
  // OR, you can also load from an HTML string:
 String summary = "<html><body>You scored <b>192</b> points.</body></html>";
 webview.loadData(summary, "text/html", null);
 // ... although note that there are restrictions on what this HTML can do.
 // See the JavaDocs for loadData() and loadDataWithBaseURL() for more info.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline gigi

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG-P500
  • Sistema operativo:
    Gentoo
Re:servire un contenuto dinamico ad un WebView
« Risposta #2 il: 26 Luglio 2012, 16:56:59 CEST »
0
Eh... così è facile :-) scherzo...

Effettivamente non mi sono spiegato bene. Ho esigenza che la risposta venga necessariamente servita dal ContentProvider, in quanto l'applicazione sarebbe principalmente un JavaScript eseguito dal WebView con il supporto asincrono dell'applicazione nativa sottostante tramite, appunto, il ContentProvider.

Idee?

Offline denper

  • Utente normale
  • ***
  • Post: 290
  • Respect: +60
    • Mostra profilo
    • Anddenper
  • Dispositivo Android:
    Moto G
  • Play Store ID:
    denper
  • Sistema operativo:
    Window 7, Windows XP
Re:servire un contenuto dinamico ad un WebView
« Risposta #3 il: 27 Luglio 2012, 08:16:22 CEST »
0
Scusa, potresti fare un esempio? Probabilmente sono io che ho problemi, ma la richiesta non mi sembra molto chiara.
Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. [A.Einstein]

Proteggi la tua privacy! Utilizza GhostPhone! https://play.google.com/store/apps/details?id=com.denper.gp
Giochi a Winforlife e Superenalotto e sei stanco di controllare le tue schedine manualmente? Prova Checkwin: https://play.google.com/store/apps/details?id=com.denper.checkwintrial

Offline gigi

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG-P500
  • Sistema operativo:
    Gentoo
Re:servire un contenuto dinamico ad un WebView
« Risposta #4 il: 27 Luglio 2012, 08:36:21 CEST »
0
Provo a sintetizzare la mia esigenza in un altro modo:

vorrei che ogni volta che il WebView si collega ad un url tipo "content://mia.applicazione.com/........" (sia come indirizzo principale della pagina che tramite una chiamata ajax) venisse eseguito un metodo del ContentProvider e, all'interno di questo, costruire una stringa arbitraria da ritornare come risposta alla chiamata.

Il problema che incontro è che il metodo loadFile() del ContentProvider ritorna un ParcelFileDescriptor, che è necessariamente un file. Io vorrei, a run-time, costruire una stringa e rispondere con quella al WebView. Passare da un file non va assolutamente bene per fare questa cosa.

Offline denper

  • Utente normale
  • ***
  • Post: 290
  • Respect: +60
    • Mostra profilo
    • Anddenper
  • Dispositivo Android:
    Moto G
  • Play Store ID:
    denper
  • Sistema operativo:
    Window 7, Windows XP
Re:servire un contenuto dinamico ad un WebView
« Risposta #5 il: 27 Luglio 2012, 08:55:09 CEST »
0
Quindi tu usi una cosa del tipo:
Codice (Java): [Seleziona]
webview.load("content://mia.applicazione.com/........") che chiama l'openFile  del ContentProvider. Questo immagino ritorni dell'html.
A questo punto tu avresti bisogno di prendere l'html restituito e comporre la tua pagina in runtime?
Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. [A.Einstein]

Proteggi la tua privacy! Utilizza GhostPhone! https://play.google.com/store/apps/details?id=com.denper.gp
Giochi a Winforlife e Superenalotto e sei stanco di controllare le tue schedine manualmente? Prova Checkwin: https://play.google.com/store/apps/details?id=com.denper.checkwintrial

Offline gigi

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG-P500
  • Sistema operativo:
    Gentoo
Re:servire un contenuto dinamico ad un WebView
« Risposta #6 il: 27 Luglio 2012, 09:08:45 CEST »
0
No. Quello che io vorrei fare è comporre run-time l'html da restituire, dentro openFile().
« Ultima modifica: 27 Luglio 2012, 09:15:40 CEST da gigi »

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:servire un contenuto dinamico ad un WebView
« Risposta #7 il: 27 Luglio 2012, 09:27:17 CEST »
0
No. Quello che io vorrei fare è comporre run-time l'html da restituire, dentro openFile().

Una cosa che proverei (premetto che è solo un'idea, molto probabilmente infondata) è questa: potresti costruire la stringa, memorizzarla in un MemoryFile e quindi passare quello.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline gigi

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG-P500
  • Sistema operativo:
    Gentoo
Re:servire un contenuto dinamico ad un WebView
« Risposta #8 il: 27 Luglio 2012, 09:44:26 CEST »
0
Idea buona, e in altri contesti sarebbe un'ottima soluzione (come programmando in Python). Ci ho già provato, ma MemoryFile non condivide una superclasse con ParcelFileDescriptor e quindi non posso restituirlo.

comunque grazie!