2012-03-02 10 views
5

que han estado tratando de poner en práctica este ejemplo usando C# y Monodroid, pero estoy teniendo dificultades para leer y escribir un archivo de Activos:Cómo leer archivos de activos utilizando VS y Monodroid

http://docs.xamarin.com/android/advanced_topics/using_android_assets

estoy usando el emulador, no es un dispositivo.

En primer lugar, estoy teniendo problemas para encontrar el espacio de nombres para Assets.Open. Lo que finalmente encontré fue

const string lfn = MyAssetFile.txt; 
System.IO.StreamReader(Android.Content.Res.Resources.System.Assets.Open(lfn); 

¿Este es el espacio de nombres correcto?

En segundo lugar, mi archivo de activo se marca como AndroidAsset y "Copiar siempre" en el panel "Propiedades" VS, pero mis intentos de leer el archivo siempre fallan (Archivo no encontrado) usando esta declaración:

string settings = ""; 
using (StreamReader sr = new System.IO.StreamReader (Android.Content.Res.Resources.System.Assets.Open(lfn))) settings = sr.ReadToEnd(); 

¿Tengo mis ajustes VS incorrectos para que el archivo de activos no se copie en el emulador, o se está copiando bien pero mi código para abrirlo/leerlo está mal?

+0

No olvides establecer la acción de compilación para el archivo de elementos en las propiedades VS: BuildAction: AndroidAsset – AndyM

Respuesta

9

Debe utilizar:

const string lfn = "MyAssetFile.txt"; 
string settings = string.Empty; 

// context could be ApplicationContext, Activity or 
// any other object of type Context 
using (var input = context.Assets.Open(lfn)) 
using (StreamReader sr = new System.IO.StreamReader(input)) 
{ 
    settings = sr.ReadToEnd(); 
} 

Si no recuerdo mal, ya que no he conseguido un IDE en el momento, Android.Content.Res.Resources.System.Assets referencias las Android activos no sus activos del proyecto. Desea utilizar sus activos de proyectos, por lo que debe utilizar el AssetManager desde su Activities o Contexts.

Por ejemplo: la clase Activity tiene una propiedad llamada Assets. Esto es lo que usas. O utiliza la propiedad ViewContext.Assets.

+0

Gracias, funciona genial. –

-4

o simplemente añadir en la parte superior:

using System.IO;

y funcionará.

equipo de Xamarin a veces olvida mencionar using cosas.

Cuestiones relacionadas