2010-11-11 11 views

Odpowiedz

4

Trzeba wykonać własne kontrole. Jak wiem, nie ma metody tej pracy.

+0

Ja też tak uważam. Dzięki. – Mudassir

+3

Zrozumiałe, że nie ma na to metody, ale jeśli nie możesz podać alternatywy, nie powinno to być odpowiedzią. – Gowiem

13

Dodałem metodę pomocnika do jednej z moich klas aplikacji. Zakładam to;

  1. Lista zasobów nie zmienia się podczas działania aplikacji.
  2. List<String> to nie pamięć (tylko 78 zasobów w mojej aplikacji).
  3. Sprawdzanie istnieje() na liście jest szybsze niż próba otwarcia pliku i obsługi wyjątku (w rzeczywistości nie profilowałem tego).
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()' już zwraca boolean, nie ma potrzeby potrójnego wyrażenia na końcu funkcji. –

9

Można też po prostu spróbować, aby otworzyć strumień, jeśli nie plik nie istnieje i jeśli nie uda plik powinien być tam:

/** 
* 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

To rozwiązanie o wiele szybsze, a następnie pobranie całego folderu zasobów jako listy i sprawdzenie ograniczenia. (Zmierzyłem ~ 50ms vs ~ 800ms na moim urządzeniu) – azendh

Powiązane problemy