Supongamos que tengo un archivo con contenido JSON en la carpeta de recursos sin procesar de mi aplicación. ¿Cómo puedo leer esto en la aplicación, para poder analizar el JSON?Uso del archivo JSON en los recursos de la aplicación Android
Respuesta
Ver openRawResource. Algo como esto debería funcionar:
InputStream is = getResources().openRawResource(R.raw.json_file);
Writer writer = new StringWriter();
char[] buffer = new char[1024];
try {
Reader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
int n;
while ((n = reader.read(buffer)) != -1) {
writer.write(buffer, 0, n);
}
} finally {
is.close();
}
String jsonString = writer.toString();
De http://developer.android.com/guide/topics/resources/providing-resources.html:
/
archivos arbitrarios primas para guardar en su forma cruda. Para abrir estos recursos con un InputStream sin procesar, llame a Resources.openRawResource() con el ID del recurso, que es R.raw.nombre de archivo.Sin embargo, si necesita acceder a nombres de archivo originales y jerarquía de archivos, puede considerar guardar algunos recursos en el directorio assets/(en lugar de res/raw /). Los archivos en activos/no tienen una ID de recurso, por lo que puede leerlos solo mediante AssetManager.
Si quiero incrustar un archivo JSON en mi aplicación, ¿dónde debería ubicarlo? en la carpeta de activos o en la carpeta sin procesar? ¡Gracias! – Ricardo
Solía respuesta de @ kabuko para crear un objeto que se carga desde un archivo JSON, utilizando Gson, a partir de los Recursos:
package com.jingit.mobile.testsupport;
import java.io.*;
import android.content.res.Resources;
import android.util.Log;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
/**
* An object for reading from a JSON resource file and constructing an object from that resource file using Gson.
*/
public class JSONResourceReader {
// === [ Private Data Members ] ============================================
// Our JSON, in string form.
private String jsonString;
private static final String LOGTAG = JSONResourceReader.class.getSimpleName();
// === [ Public API ] ======================================================
/**
* Read from a resources file and create a {@link JSONResourceReader} object that will allow the creation of other
* objects from this resource.
*
* @param resources An application {@link Resources} object.
* @param id The id for the resource to load, typically held in the raw/ folder.
*/
public JSONResourceReader(Resources resources, int id) {
InputStream resourceReader = resources.openRawResource(id);
Writer writer = new StringWriter();
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(resourceReader, "UTF-8"));
String line = reader.readLine();
while (line != null) {
writer.write(line);
line = reader.readLine();
}
} catch (Exception e) {
Log.e(LOGTAG, "Unhandled exception while using JSONResourceReader", e);
} finally {
try {
resourceReader.close();
} catch (Exception e) {
Log.e(LOGTAG, "Unhandled exception while using JSONResourceReader", e);
}
}
jsonString = writer.toString();
}
/**
* Build an object from the specified JSON resource using Gson.
*
* @param type The type of the object to build.
*
* @return An object of type T, with member fields populated using Gson.
*/
public <T> T constructUsingGson(Class<T> type) {
Gson gson = new GsonBuilder().create();
return gson.fromJson(jsonString, type);
}
}
Para usarlo, se había hacer algo como lo siguiente (el ejemplo está en una InstrumentationTestCase
):
@Override
public void setUp() {
// Load our JSON file.
JSONResourceReader reader = new JSONResourceReader(getInstrumentation().getContext().getResources(), R.raw.jsonfile);
MyJsonObject jsonObj = reader.constructUsingGson(MyJsonObject.class);
}
¡Genial :)! Gracias. – nikolaDev
Muy buena forma reutilizable para lograr esto. ¡Gracias! – speedynomads
No olvide agregar dependencias {compilar com.google.code.gson: gson: 2.8.2 '} en su archivo gradle – patrics
InputStream is = mContext.getResources().openRawResource(R.raw.json_regions);
int size = is.available();
byte[] buffer = new byte[size];
is.read(buffer);
is.close();
String json = new String(buffer, "UTF-8");
Kotli n es ahora el idioma oficial de Android, por lo que creo que sería útil para alguien
val text = resources.openRawResource(R.raw.your_text_file)
.bufferedReader().use { it.readText() }
- 1. JSON de análisis en Android - desde la carpeta de recursos
- 2. Uso de recursos incrustados en la aplicación de consola C#
- 3. ¿Acceso estático a los recursos de una aplicación de Android?
- 4. ¿Cómo uso los recursos globales en WPF?
- 5. Android: ¿Cómo organizar los recursos del proyecto?
- 6. ¿Cómo uso los recursos Android predeterminados en mi diseño xml?
- 7. Recursos útiles del sistema Android
- 8. ¿La representación JSON de los recursos REST debe usar URI para los recursos relacionados?
- 9. Uso de recursos dibujable
- 10. Uso de recursos de diseño en LiveWallpaper en Android
- 11. Archivo JSON VS SQLite android
- 12. Uso de los padres para los recursos dibujable
- 13. Recuperando todos los recursos extraíbles del objeto de recursos
- 14. carga json del archivo en el objeto
- 15. Android: ¿Cómo liberar recursos cuando finaliza la aplicación?
- 16. Leer el archivo HTML de los recursos
- 17. Uso de recursos en Windows
- 18. Java (aplicación web maven), ¿cómo obtener la ruta completa del archivo para el archivo en la carpeta de recursos?
- 19. RandomAccessFile en el archivo de recursos sin formato de Android
- 20. Recursos de Android: ¿Cómo se manejan los mapas de bits de los recursos manejados en memoria?
- 21. Lectura de un archivo XML a partir de los recursos
- 22. Uso del controlador Android
- 23. obtener los lenguajes de recursos de la aplicación
- 24. Conseguir acceso a los recursos de un ArrayAdapter en Android
- 25. ¿Cómo obtener recursos del archivo context.xml en la aplicación web tomcat?
- 26. anfitriones Android archivo Uso de
- 27. Acceder a los archivos de recursos en Android
- 28. Uso de la configuración de la aplicación en los ensamblajes
- 29. Obtener DisplayName del archivo de recursos
- 30. ¿Cómo copiar el archivo de los recursos?
¿Qué sucede si quiero poner la cadena en un recurso de Cadena en Android y usarla dinámicamente usando getResources(). GetString (R.String.name)? –
Para mí no funciona debido a las comillas, que se ignoran al leer y que también parecen no se pueden escapar –
¿Hay alguna manera de hacer [ButterKnife] (http://jakewharton.github.io/butterknife/) unir el recurso sin procesar? Escribir más de 10 líneas de código solo para leer una cadena parece un poco exagerado. – Jezor