2012-07-24 7 views
6

¿Cuál es la mejor manera de mantener un List<String[]> mientras mi aplicación se ejecuta? Estoy teniendo problemas con mi enfoque. La mayoría de las veces me da un error OutOfMemory ya que la lista es demasiado grande.android cómo mantener la lista grande <String[]> mientras la aplicación ejecuta

El List<String[]> es el resultado de analizar un archivo csv que he descargado en línea. Lo que hago es analizar el csv en una actividad a continuación, guardar el resultado en un miembro de la clase estática como:

String url = "http://xxx/pdf/pms/pms_test.csv"; 
try { 
    InputStream input = new URL(url).openStream(); 
    CSVReader reader = new CSVReader(new InputStreamReader(input)); 
    SchedController.sched = reader.readAll(); 
    input.close(); 
} 

... luego acceder a ClassName.sched en diferentes actividades.

Estoy haciendo esto para que los datos analizados estén disponibles en cada actividad ... Y no tengo que volver a analizarlos. ¿Qué puedo hacer para mejorarlo?

+1

debe aplicarse con mecanismo de paginación "Cargando Más ..." funcionalidad. Le ayudará a lograr suavidad y velocidad también. –

+1

¿Lo mantendría en un servicio y pasaría los datos entre servicios y ayuda de actividades? – Gogu

+0

¿Está almacenando los valores analizados en una 'Colección' como' HashTable' o 'ArrayList'? – Abhilasha

Respuesta

1

Creo que puede tener 2 enfoques.

  1. de guardar el archivoy analizarlo de una manera carga diferida
  2. Se crea una base de datosy guardar los datos.

Sugiero que le permite crear una base de datos, esto no es difícil y vamos a administrar bien sus datos. Puede hacer lazyLoading fácilmente con el cursor, o usar un ORM (ORMLite/Greendao) ... Creo que esta es la mejor manera y la más rápida para cargar sus datos.

Espero que esto te ayude.

+0

Por lo que entiendo, la carga diferida funciona bien cuando no tienes que obtener y mostrar todo a la vez ... pero en mi caso, revisar todo el archivo csv es crucial porque los resultados que necesito se basan en un cronograma presencia en el archivo ... Sin embargo, intentaré leer sobre cómo crear una base de datos para él. Ojalá no fuera difícil. Lo pensé la primera vez que vi el archivo csv, pero usé el enfoque que dije más arriba ... – yojoannn

+0

Es un poco de trabajo, pero no te arrepentirás;) – AMerle

1

Solo para agregar al comentario de Paresh. Puedo sugerir algo similar que utilicé en mi aplicación.

Por ejemplo, necesito mostrar la lista de artículos en una tienda. (Cada artículo tendrá identificación, nombre y costo).

Para lograr esto, primero hago una solicitud al servidor para obtener el número de elementos, por ejemplo itemCount. Ahora establezco un límite para el número de elementos mostrados en una página, por ejemplo 100. Si el artículoCuenta es mayor que 100, visualizo una alerta diciendo que solo se mostrarán 100 elementos y se puede agregar un siguiente button para descargar el siguiente conjunto de artículos O si se trata de una búsqueda, puede solicitar al usuario que retroceda y refine la búsqueda. Si objetoCuenta es inferior a 100, entonces usted no tendrá ningún problema

De esta manera de paginación puede ser implementado para evitar problemas OutOfMemory

+0

Ah ... Creo que no puedo hacer eso (no estoy seguro ...) Verá, mi aplicación devuelve detalles de la programación formateados en el archivo csv. Cada vez que estoy buscando un cronograma, tengo que pasar por toda la csv para devolver los resultados correctos. Además, el cliente requiere que la aplicación sea utilizable incluso si está fuera de línea ... – yojoannn

+1

Entonces supongo que descargar todo una vez, analizar y guardar en la base de datos es mejor que mantener todo en memoria de tiempo de ejecución (lo que está causando OutOfMemory). Y acceder a ella cuando necesario para mostrar Puede ser durante el diseño de la base de datos que puede categorizar los datos en varias tablas para que no pierda demasiado tiempo filtrándolo. De esta manera, la aplicación puede funcionar incluso si es _offline_ – Abhilasha

+0

, supongo que también ... ¡Gracias por su tiempo! :) – yojoannn

Cuestiones relacionadas