2010-12-04

mediaplayerを作ってみる(9)-2

また、地味に変更。思いつきでAndroid2.2のエミュレーターで動かしたら
強制終了。ほっといても良かったんですが。is01は1.6なので。
なんか引っかかって。こちら↓を参考に

Android 1.xと2.2の互換性について



dirListMakerを


public ArrayList<String> dirListMaker(ArrayList<String> list, String ext) {
//ArrayListの生成
ArrayList<String> array = new ArrayList<String>();

int m = 0; int n = 0;
        while (list.size() > m) {
        
         File subDir = new File(list.get(m));
         try {
         String[] subFileName = subDir.list();
        n = 0;
        while (subFileName.length > n) {
        File subFile = new File(subDir.getPath() + FILE_SEP + subFileName[n]);
       
        if (subFile.isDirectory()) {
        list.add(subDir.getPath() + FILE_SEP + subFileName[n]);
       
        } else if (subFile.isFile() && subFile.getName().endsWith(ext)) {
       
        if (!array.contains(list.get(m))) {
        array.add(list.get(m));
        }
        }
        n++;
        }
         } catch (NullPointerException e) {
         /*Android2.2ではString[] subFileName = subDir.list();において
         * ディレクトリが空の場合nullを返します。
         * そのExceptionを回避するためのtry-catchなので
         処理をしません。*/
         }
         m++;
        }
        return array;
}

try-catchで括っただけ。これで、いけました。エミュレーターでは。
もう一つの方も変更しときました。使ってませんが。
後もう一ヶ所変更。特につながりはありませんが。
javaの道の文字列-6.文字列の分割を参考に。

ActivityのonCreate内でspinnerAdaperにaddしてるとこ↓を


        int n = 0;
        for(String name : musicDirList) {
         ++n;
         spinnerAdapter.add(n + ":" + name);
        }

この様に↓

        //ちょっとした準備
        ArrayList<String[]> dirNameList = new ArrayList<String[]>();
        for (String fileName : musicDirList) {
         String[] strArray = fileName.split(File.separator);
         dirNameList.add(strArray);
        }
        
        //ディレクトリ2階層分だけ表示。SD直下にある時は1階層だけ。
        int n = 0;
        for(String[] nameList : dirNameList) {
         int size = nameList.length;
         if (size < 3) {
         spinnerAdapter.add((n + 1) + ":" + "/" + nameList[size - 1]);
         } else {
         spinnerAdapter.add((n + 1) + ":" + "/" + nameList[size - 2] + "/" + nameList[size - 1]);
         }
         n++;
        }

階層が深くなったときに表示しきれなくなってたので。
もっと他にやりようがあるような気もしますが。
layoutを作るとか、adapterを作るとか。

次は、いや次も、なんか適当に。たぶん。

0 件のコメント:

コメントを投稿