Autore Topic: Recuperare file da Resources  (Letto 1434 volte)

Ulisse

  • Visitatore
Recuperare file da Resources
« il: 05 Settembre 2013, 11:57:49 CEST »
0
Ciao a tutti ! sono nuovo del mondo Android e mi è posto davanti questo problema. Ho provato a cercare nel forum ma non mi sembra di aver trovato niente a riguardo.

Nella mia app io dovrei avere dei file json nelle resources e recuperarli in una classe per recuperare i dati al proprio interno.

Quindi le mie domande sono:
- in quale cartella devo metterli questi file ?
- Come li recupero da codice ?

Grazie in anticipo  :-)

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +152
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:Recuperare file da Resources
« Risposta #1 il: 05 Settembre 2013, 13:21:18 CEST »
0
Li puoi mettere dentro res/raw.
Il file puoi lo leggi in maniera molto semplice.

Codice (Java): [Seleziona]
try {
            InputStream is = mContext.getResources().openRawResource(mChangeLogFileResourceId);
            if (is!=null){
                    ......
            }
 }..

Offline matttt

Re:Recuperare file da Resources
« Risposta #2 il: 05 Settembre 2013, 13:43:24 CEST »
0
Oppure in alternativa...

Se vorrai che i tuoi utenti possano accedere facilmente a quei files puoi fare:
Codice (Java): [Seleziona]
dir = Environment.getExternalStorageDirectory();    // verifica che non sia NULL, non tutti hanno una partizione esterna o potrebbe non essere accessibile per determinate ragioni
path = new File( path, "tua_cartella" );    // cartella che puoi creare con path.mkdirs()

Se invece sono per uso interno alla tua app puoi fare:
Codice (Java): [Seleziona]
path = context.getExternalCacheDir();    // in questo caso il percorso è già pronto con una dir a te riservata da parte di Android
// Anche in questo caso controlla che non sia NULL per il discorso di prima

Oppure puoi usare: context.getFilesDir() - per la partizione interna e cambia il modo in cui Android considera i tuoi files, se come cache o come files generici della tua app.

Per caricare dati Json dipende dall'API Android della tua app.
Se vuoi compatibilità verso il basso (tipo GingerBread, 2.3.X, etc.) puoi usare org.json.* - esempio:
Codice (Java): [Seleziona]
JSONArray jarr = (JSONArray) new JSONTokener( json_data ).nextValue();    // in json_data carichi la stringa del file JSON da file
for( int i = 0; i < jarr.length(); i++ )
{
    JSONObject jobj = jarr.getJSONObject( i );
    // jobj.getString( "name" );   // etc.
}

Per Android 3.X invece puoi usare: android.util.JsonReader
JsonReader | Android Developers
Le mie apps su Google Play Store:

Ulisse

  • Visitatore
Re:Recuperare file da Resources
« Risposta #3 il: 05 Settembre 2013, 14:18:37 CEST »
0
Citazione
Se vorrai che i tuoi utenti possano accedere facilmente a quei files puoi fare:
I file mi servirebbero perchè ho creato un layout "scheletro" in cui poi dovrei inserire dati via via diversi
quindi in teoria l'utente non dovrebbe mai accedere ai file

Citazione
Codice (Java): [Seleziona]
InputStream is = mContext.getResources().openRawResource(mChangeLogFileResourceId);
considerando che vorrei creare una classe che si occupa di questo, mContext deve essere il context dell'activity da cui lo richiamo, cioè mi spiego.
Io chiamo la classe ad esempio così:
Codice (Java): [Seleziona]
// Activity da cui chiamo la classe
nClasse a = new nClasse(getContext())

//classe richiamata - costruttore
public nClasse(Context context)

E per "mChangeLogFileResourceId" sarà R.raw.nomedelmiofile ?

Scusate le tante domande  ??? ma è un ambiente nuovo per me questo :)


Citazione
Per caricare dati Json dipende dall'API Android della tua app.
Se vuoi compatibilità verso il basso (tipo GingerBread, 2.3.X, etc.) puoi usare org.json.* - esempio:
Comunque l'app è destinata a versione 4 e successive, scusate mi ero dimenticato di scriverlo

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +152
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:Recuperare file da Resources
« Risposta #4 il: 06 Settembre 2013, 01:44:44 CEST »
0
E per "mChangeLogFileResourceId" sarà R.raw.nomedelmiofile ?

Si scusa, non era chiaro dalla mia risposta.
E' proprio R.raw.nomedelmiofile.

Comunque l'app è destinata a versione 4 e successive, scusate mi ero dimenticato di scriverlo
minSdk=14 ottima scelta!

Ulisse

  • Visitatore
Re:Recuperare file da Resources
« Risposta #5 il: 06 Settembre 2013, 09:27:58 CEST »
0
ok Grazie risolto :)

Offline filipposapo

  • Utente junior
  • **
  • Post: 135
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Tablet Samsung Note 10.1
  • Sistema operativo:
    Windows 8
Re:Recuperare file da Resources
« Risposta #6 il: 08 Ottobre 2013, 10:52:55 CEST »
0
Scusate se continuo in questo post ma ho un problema simile. Ho inserito una risorsa nella cartella raw, ma non riesco a richiamarla con R.raw.nomefile, nonostante nella classe R sia dichiarata.
Come mai?

Offline Tizionario

  • Nuovo arrivato
  • *
  • Post: 30
  • Respect: +1
    • Github
    • Google+
    • tizionario
    • tizionario
    • Mostra profilo
    • Svappdroid
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    Tizionario
  • Sistema operativo:
    ArchLinux
Re:Recuperare file da Resources
« Risposta #7 il: 08 Ottobre 2013, 11:08:06 CEST »
0
Scusate se continuo in questo post ma ho un problema simile. Ho inserito una risorsa nella cartella raw, ma non riesco a richiamarla con R.raw.nomefile, nonostante nella classe R sia dichiarata.
Come mai?

Mi pare che la cartella raw si trovi sotto assets (non ne sono sicuro al momento), se è così è normale che non ci accedi in quanto i file presenti in assets non vegnon inseriti in R.java, ma devi usare l'AssetManager
Vuoi diventare uno sviluppatore Android? Segui i miei tutorial su http://svappdroid.com

Offline filipposapo

  • Utente junior
  • **
  • Post: 135
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Tablet Samsung Note 10.1
  • Sistema operativo:
    Windows 8
Re:Recuperare file da Resources
« Risposta #8 il: 08 Ottobre 2013, 11:26:04 CEST »
0
no raw si trova in res

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:Recuperare file da Resources
« Risposta #9 il: 08 Ottobre 2013, 11:41:23 CEST »
0
Scusate se continuo in questo post ma ho un problema simile. Ho inserito una risorsa nella cartella raw, ma non riesco a richiamarla con R.raw.nomefile, nonostante nella classe R sia dichiarata.
Come mai?

Posta il codice che non ti funziona.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline filipposapo

  • Utente junior
  • **
  • Post: 135
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Tablet Samsung Note 10.1
  • Sistema operativo:
    Windows 8
Re:Recuperare file da Resources
« Risposta #10 il: 08 Ottobre 2013, 11:49:49 CEST »
0
si è quello dell'altro topic perchè sto cercando di inserire il certificato generato con keytool ad ogni modo:
Codice (Java): [Seleziona]
import java.io.InputStream;
import java.security.KeyStore;

import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.PlainSocketFactory;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.SingleClientConnManager;

import android.R;
import android.content.Context;

public class MyHttpClient extends DefaultHttpClient {

          final Context context;

          public MyHttpClient(Context context) {
              this.context = context;
          }

          @Override
          protected ClientConnectionManager createClientConnectionManager() {
              SchemeRegistry registry = new SchemeRegistry();
              registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
              // Register for port 443 our SSLSocketFactory with our keystore
              // to the ConnectionManager
              registry.register(new Scheme("https", newSslSocketFactory(), 443));
              return new SingleClientConnManager(getParams(), registry);
          }

          private SSLSocketFactory newSslSocketFactory() {
              try {
                  // Get an instance of the Bouncy Castle KeyStore format
                  KeyStore trusted = KeyStore.getInstance("BKS");
                  // Get the raw resource, which contains the keystore with
                  // your trusted certificates (root and any intermediate certs)
                 
                  InputStream in = context.getResources().openRawResource(R.raw.certificato);
                  try {
                      // Initialize the keystore with the provided trusted certificates
                      // Also provide the password of the keystore
                      trusted.load(in, "mysecret".toCharArray());
                  } finally {
                      in.close();
                  }
                  // Pass the keystore to the SSLSocketFactory. The factory is responsible
                  // for the verification of the server certificate.
                  SSLSocketFactory sf = new SSLSocketFactory(trusted);
                  // Hostname verification from certificate
                  // [url=http://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html#d4e506]Chapter&nbsp;2.&nbsp;Connection management[/url]
                  sf.setHostnameVerifier(SSLSocketFactory.STRICT_HOSTNAME_VERIFIER);
                  return sf;
              } catch (Exception e) {
                  throw new AssertionError(e);
              }
          }
        }

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Recuperare file da Resources
« Risposta #11 il: 08 Ottobre 2013, 11:52:36 CEST »
0
ma l'errore qual è? metti un catch dove hai il try-finally
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline filipposapo

  • Utente junior
  • **
  • Post: 135
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Tablet Samsung Note 10.1
  • Sistema operativo:
    Windows 8
Re:Recuperare file da Resources
« Risposta #12 il: 08 Ottobre 2013, 11:56:10 CEST »
0
Vero scusate, l'errore è che R.raw.certificato non viene riconosciuto nonostante io abbia messo il file certificato nella cartella raw

Post unito: 08 Ottobre 2013, 11:57:42 CEST
cioè r.raw.certificato è segnato in rosso

Post unito: 08 Ottobre 2013, 12:05:23 CEST
Se con uno stratagemma provo a inserire l'intero con cui è definita la risorsa nella classe R il log che ottengo è:
Codice: [Seleziona]
10-07 12:28:49.926: E/log_tag(24032): error post java.io.FileNotFoundException: /res/raw/certificato: open failed: ENOENT (No such file or directory)
« Ultima modifica: 08 Ottobre 2013, 12:05:23 CEST da filipposapo, Reason: Merged DoublePost »

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Recuperare file da Resources
« Risposta #13 il: 08 Ottobre 2013, 12:33:07 CEST »
0
Vero scusate, l'errore è che R.raw.certificato non viene riconosciuto nonostante io abbia messo il file certificato nella cartella raw

Post unito: 08 Ottobre 2013, 11:57:42 CEST
cioè r.raw.certificato è segnato in rosso

Post unito: 08 Ottobre 2013, 12:05:23 CEST
Se con uno stratagemma provo a inserire l'intero con cui è definita la risorsa nella classe R il log che ottengo è:
Codice: [Seleziona]
10-07 12:28:49.926: E/log_tag(24032): error post java.io.FileNotFoundException: /res/raw/certificato: open failed: ENOENT (No such file or directory)
fai un clean del progetto
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline filipposapo

  • Utente junior
  • **
  • Post: 135
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Tablet Samsung Note 10.1
  • Sistema operativo:
    Windows 8
Re:Recuperare file da Resources
« Risposta #14 il: 08 Ottobre 2013, 12:38:20 CEST »
0
Fatto purtroppo.....