画像をyyyyMMddHHmmssで保存し、日付が新しいものから取得していくには

275 views
Skip to first unread message

kenkyuuinH

unread,
Jul 11, 2013, 8:03:44 PM7/11/13
to android-g...@googlegroups.com
お疲れ様です。林でございます。
 
画像のファイル名をyyyyMMddHHmmssで保存し、日付が新しいものから取得し、
ImageViewに表示したいのですが、どうやって日付が新しいものから取得してくんだろうと困っております。
 
ちょっとしたアドバイスでも良いので、ぜひお力を貸してください。
 
よろしくお願い致します。

kacodama

unread,
Jul 11, 2013, 8:29:16 PM7/11/13
to android-g...@googlegroups.com
ファイル名を全部取得してArrayListに入れて、Collection.sortすればいいのでは。
ファイルはソート済みリストから順番にファイル名を取得して開いていけばいいと思います。

当然ですがファイルが多いと時間かかりますのでAsyncTaskなどで非同期処理
にする必要があるでしょう。


2013年7月12日金曜日 9時03分44秒 UTC+9 kenkyuuinH:
Message has been deleted

kenkyuuinH

unread,
Jul 15, 2013, 6:48:16 AM7/15/13
to android-g...@googlegroups.com
お返事を頂きありがとうございます。
 
アドバイス通り、ファイル名を取得してArrayListに入れて、Collection.sortして、
ソート済みリストから順番にファイル名を取得していこうと思ったのですが、できません。
以下に私が実施したソースコードを記します。
お気づきの点がございましたら、ぜひご指摘をよろしくお願い致します。
 
//カメラで撮影した結果を受け取る
 @Override
 public void onActivityResult(int requestCode,int resultCode,Intent data) {
      if(requestCode == 1 && resultCode == RESULT_OK ){
//撮影した画像を/data/data/パッケージ名/files 以下に保存する
       try
       {
         Bitmap bm = null;
                  Bundle extras = data.getExtras();
                  bm = (Bitmap) extras.get("data");
                  // 撮影した写真をファイルに生成する。
                  String fileName = getPicFileName();//写真のファイル名を年・月・日・時間・分・秒で保存する
                  FileOutputStream fos = openFileOutput(fileName, MODE_PRIVATE);
                  BufferedOutputStream bos = new BufferedOutputStream(fos);
                  bm.compress(Bitmap.CompressFormat.JPEG, 100, bos);
                            
                  fos.close();
                  bos.flush();
                  bos.close();
          }
   catch(Exception e){
   Toast.makeText(getApplicationContext(),"撮影した画像を保存できません。", Toast.LENGTH_SHORT).show();
   }
 
  ArrayList<String> dirList = new ArrayList<String>();
 
//onActivityResultで保存した画像をphotoviewに表示する
       photoview = (ImageView) findViewById(R.id.photoview);
       Bitmap bitmap = null;
       try
       {
//getFilesDir()で内部ストレージ(/data/data/パッケージ名/files)のディレクトリを取得する
              String filedir = new String("data/data/" + getPackageName() + "/files/");
              //File Filename = new File(filedir,getPicFileName());
              dirList.add(filedir + getPicFileName());
              Collections.sort(dirList);
 
      FileInputStream in = openFileInput(dirList.get(0));  ←←←←←←←←←←←←←ここで落ちる   
                 BufferedInputStream bis = new BufferedInputStream(in);
                 ByteArrayOutputStream baout = new ByteArrayOutputStream();
                 byte[] w = new byte[1024];
                 while (bis.read(w) >= 0) {
                         baout.write(w, 0, 1024);
                 }
                 byte[] byteData = baout.toByteArray();
                 bitmap = BitmapFactory.decodeByteArray(byteData, 0, byteData.length);
                 in.close();
                 bis.close();
                 baout.close();
       }
       catch(Exception e){
        Toast.makeText(getApplicationContext(),"画像を表示できません。", Toast.LENGTH_SHORT).show();
       }
       photoview.setImageBitmap(bitmap);
  }
 }
 
 
 


 

kacodama

unread,
Jul 15, 2013, 8:52:55 PM7/15/13
to android-g...@googlegroups.com
ファイル名を全部取得する=ディレクトリ内のファイルをリストアップする必要がありますが、されているコードが見あたりませんね。
ディレクトリ内にディレクトリがあればさらに再帰してリストアップする必要もありますよ。

まずはそこからがんばってください。
コードの答えは書きません。

ていうか、onActivityResultで受信した画像が最新なら、そのBitmap を受け取ってるんですから
それをImageViewに貼り付ければいいのでは???
わざわざファイル名(日付)でソートする必要もないかと・・・・

あと、

              String filedir = new String("data/data/" + getPackageName() + "/files/");

ここは getDirgetFilesDirをを使いましょう。

kenkyuuinH

unread,
Jul 16, 2013, 1:02:09 AM7/16/13
to android-g...@googlegroups.com
kakodamaさん
 
早速のご返信ありがとうございます。
>ていうか、onActivityResultで受信した画像が最新なら、そのBitmap を受け取ってるんですから
>それをImageViewに貼り付ければいいのでは???
>わざわざファイル名(日付)でソートする必要もないかと・・・・
 
ですけども、伝え忘れていました。撮った写真をファイル名が日時で内部ストレージに保存して、画面に用意した複数の
ImageViewに日時が新しい順に表示していきたいのです。 
 
まずは、先程下さったアドバイスを基にがんばってみます。

kenkyuuinH

unread,
Jul 17, 2013, 4:39:56 AM7/17/13
to android-g...@googlegroups.com
kokodamaさん
 
お疲れ様です。林です。
 
kokodamaさんのおっしゃるように、ディレクトリ内のファイルをリストアップして、ArrayListにそれを入れて、Collection.reverceで降順にしてから
ファイルを順番にgetしていったら目的のことができました。
 
本当にありがとうございました。
Reply all
Reply to author
Forward
0 new messages