web-dev-qa-db-fra.com

Android comment accéder aux ressources brutes que je mets dans le dossier res?

En J2ME, j'ai fait ça comme ça: getClass().getResourceAsStream("/raw_resources.dat");

Mais dans Android, je suis toujours nul là-dessus, pourquoi?

51
Arkaha
InputStream raw = context.getAssets().open("filename.ext");

Reader is = new BufferedReader(new InputStreamReader(raw, "UTF8"));
25
Adrian Vintu

Pour les fichiers bruts, vous devriez envisager de créer un dossier brut dans le répertoire res, puis appeler getResources().openRawResource(resourceName) depuis votre activité.

121
Samuh

Dans certaines situations, nous devons obtenir l'image à partir d'un dossier dessinable ou brut en utilisant le nom de l'image à la place si l'ID généré

// Image View Object 
        mIv = (ImageView) findViewById(R.id.xidIma);
// create context Object for  to Fetch  image from resourse 
Context mContext=getApplicationContext();

// getResources().getIdentifier("image_name","res_folder_name", package_name);

// find out below example 
    int i = mContext.getResources().getIdentifier("ic_launcher","raw", mContext.getPackageName());

// now we will get contsant id for that image       
        mIv.setBackgroundResource(i);
13
sravan

Une approche avancée utilise Kotlin fonction d'extension

fun Context.getRawInput(@RawRes resourceId: Int): InputStream {
    return resources.openRawResource(resourceId)
}

Une autre chose intéressante est la fonction d'extension utilise qui est définie dans la portée Closeable

Par exemple, vous pouvez travailler avec le flux d'entrée de manière élégante sans gérer les exceptions et la gestion de la mémoire

fun Context.readRaw(@RawRes resourceId: Int): String {
    return resources.openRawResource(resourceId).bufferedReader(Charsets.UTF_8).use { it.readText() }
}
5
yoAlex5

InputStream in = getResources (). OpenRawResource (resourceName);

Cela fonctionnera correctement. Avant cela, vous devez créer le fichier xml/fichier texte en ressource brute. Ensuite, il sera accessible.

Modifier
Parfois, com.andriod.R sera importé en cas d'erreur dans le fichier de mise en page ou les noms d'image. Vous devez donc importer le package correctement, alors seul le fichier brut sera accessible.

3
java dev

getClass().getResourcesAsStream() fonctionne très bien sur Android. Assurez-vous simplement que le fichier que vous essayez d'ouvrir est correctement intégré dans votre APK (ouvrez l'APK en tant que Zip).

Normalement, sur Android vous placez ces fichiers dans le répertoire assets. Donc, si vous mettez le raw_resources.dat dans le sous-répertoire assets de votre projet, il se retrouvera dans le répertoire assets de l'APK et vous pourrez utiliser:

getClass().getResourcesAsStream("/assets/raw_resources.dat");

Il est également possible de personnaliser le processus de génération afin que le fichier ne se retrouve pas dans le répertoire assets de l'APK.

3
0xF