2010-11-11 12 views

Respuesta

4

Usted tiene que realizar sus propios controles. Como sé, no hay un método para este trabajo.

+0

Yo también creo que sí. Gracias. – Mudassir

+3

Es comprensible que no haya un método para esto, pero si no puede proporcionar una alternativa, entonces esta no debería haber sido una respuesta. – Gowiem

13

Agregué un método de ayuda a una de mis clases de aplicación. Estoy asumiendo eso;

  1. la lista de activos no cambia mientras la aplicación se está ejecutando.
  2. List<String> no es un cerdo de la memoria (solo 78 activos en mi aplicación).
  3. verificar que existe() en la Lista es más rápido que tratar de abrir un Archivo y manejar una excepción (en realidad no he perfilado esto).
AssetManager am; 
List<String> mapList; 

/** 
* Checks if an asset exists. 
* 
* @param assetName 
* @return boolean - true if there is an asset with that name. 
*/ 
public boolean checkIfInAssets(String assetName) { 
    if (mapList == null) { 
     am = getAssets(); 
     try { 
      mapList = Arrays.asList(am.list("")); 
     } catch (IOException e) { 
     } 
    } 
    return mapList.contains(assetName); 
} 
+6

'List.contains()' ya devuelve booleano, sin necesidad de la expresión ternaria al final de la función. –

9

También puede simplemente tratar de abrir la corriente, si falla el archivo no existe y si no falla el archivo debería estar ahí:

/** 
* Check if an asset exists. This will fail if the asset has a size < 1 byte. 
* @param context 
* @param path 
* @return TRUE if the asset exists and FALSE otherwise 
*/ 
public static boolean assetExists(Context context, String path) { 
    boolean bAssetOk = false; 
    try { 
     InputStream stream = context.getAssets().open(ASSET_BASE_PATH + path); 
     stream.close(); 
     bAssetOk = true; 
    } catch (FileNotFoundException e) { 
     Log.w("IOUtilities", "assetExists failed: "+e.toString()); 
    } catch (IOException e) { 
     Log.w("IOUtilities", "assetExists failed: "+e.toString()); 
    } 
    return bAssetOk; 
} 
+0

Esta solución es mucho más rápida, luego obtiene toda la carpeta del activo como lista y verifica la contención. (Medí ~ 50ms vs ~ 800ms en mi dispositivo) – azendh

Cuestiones relacionadas