画像更新処理に関して

497 views
Skip to first unread message

asaka

unread,
Mar 30, 2010, 11:45:29 PM3/30/10
to 日本Androidの会
お世話になっております。

画像の更新処理ですが、
下記の方法にて、いったん既存データを
削除してから新しい画像の生成を行っています。
(画像の名前は変わらないままです)

きっと削除方法が間違っていると思いますが、
画像が削除されません。
ご存知の方はご教授いただけますでしょうか?

File imageFile = new File(/SDcard/ + fileName);
// イメージファイルが既に存在する場合、削除する
if (imageFile.exists()) {
imageFile.delete();
}

mosaki4

unread,
Mar 30, 2010, 11:53:53 PM3/30/10
to android-g...@googlegroups.com
大崎といいます。

その方法で削除可能です
マニフェストファイルに下記の記述が必要ですが、記述されていますか?

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>


2010年3月31日12:45 asaka <beny...@gmail.com>:

--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。


aharisu

unread,
Mar 31, 2010, 12:20:03 AM3/31/10
to android-g...@googlegroups.com
aharisuといいます。

画像が削除されないとは具体的にどういう挙動をしているのでしょうか。

たとえば、そもそも画像を消すことができないのであれば、
先に出ているようにマニフェストへの記述が足りてないのかもしれません。

もしくは、画像のファイルそのものは更新できているが、
ギャラリーから見たとき、一瞬昔の画像が表示されその後更新した画像が表示されるといった挙動なのですか?
この場合は、画像を更新するときにファイルだけを消すのではなく、
ContentResolverのdeleteメソッドを使ってDB内のデータも一度消去し新しく作り直す必要があります。


2010年3月31日12:53 mosaki4 <mos...@gmail.com>:

asaka

unread,
Mar 31, 2010, 1:59:50 AM3/31/10
to 日本Androidの会
大崎さん
ahrisuさん

言葉たらすで申し訳ありません。

現象としては、一瞬昔の画像が表示されその後更新した画像が表示される
といった挙動です。

下記のとおりにプログラムを組んでいますが、
うまくいきません。一度削除(//存在すれば削除)すると生成できません。

ご指摘お願いできますでしょうか?


//---------------------
File imageFile;
imageFile = new File("/SDcard/appliName/" + fileName);
if (imageFile.exists()) {
// 存在すれば削除
imageFile.delete();
ContentResolver contentResolver = getContentResolver();
contentResolver.delete(Images.Media.EXTERNAL_CONTENT_URI,
imageFile.getPath(), null);
}

// イメージファイル生成
imageFile = new File("/SDcard/appliName/" + fileName);

FileOutputStream out = new FileOutputStream(imageFile.getPath());
bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
out.flush();
out.close();

ContentValues values = new ContentValues();
ContentResolver contentResolver = getContentResolver();
values.put(Images.Media.MIME_TYPE, "image/png");
values.put(Images.Media.TITLE, imageFile.getPath());
values.put("_data", imageFile.getPath());
contentResolver.insert(Images.Media.EXTERNAL_CONTENT_URI, values);
//-----------------------

On 3月31日, 午後1:20, aharisu <foo.yob...@gmail.com> wrote:
> aharisuといいます。
>
> 画像が削除されないとは具体的にどういう挙動をしているのでしょうか。
>
> たとえば、そもそも画像を消すことができないのであれば、
> 先に出ているようにマニフェストへの記述が足りてないのかもしれません。
>
> もしくは、画像のファイルそのものは更新できているが、
> ギャラリーから見たとき、一瞬昔の画像が表示されその後更新した画像が表示されるといった挙動なのですか?
> この場合は、画像を更新するときにファイルだけを消すのではなく、
> ContentResolverのdeleteメソッドを使ってDB内のデータも一度消去し新しく作り直す必要があります。
>

> 2010年3月31日12:53 mosaki4 <mosa...@gmail.com>:


>
>
>
> > 大崎といいます。
>
> > その方法で削除可能です
> > マニフェストファイルに下記の記述が必要ですが、記述されていますか?
>
> > <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
>

> > 2010年3月31日12:45 asaka <beny0...@gmail.com>:


>
> > お世話になっております。
>
> >> 画像の更新処理ですが、
> >> 下記の方法にて、いったん既存データを
> >> 削除してから新しい画像の生成を行っています。
> >> (画像の名前は変わらないままです)
>
> >> きっと削除方法が間違っていると思いますが、
> >> 画像が削除されません。
> >> ご存知の方はご教授いただけますでしょうか?
>
> >> File imageFile = new File(/SDcard/ + fileName);
> >> // イメージファイルが既に存在する場合、削除する
> >> if (imageFile.exists()) {
> >> imageFile.delete();
> >> }
>
> >> --
> >> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> >> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。

> >> このグループから退会するには、android-group-j...@googlegroups.com<android-gro-up-japan%2Bunsu...@googlegroups.com>にメールを送信してください。
> >> 詳細については、http://groups.google.com/group/android-group-japan?hl=jaからこのグループにアクセスしてください。


>
> > --
> > このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> > このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。

> > このグループから退会するには、android-group-j...@googlegroups.com<android-gro-up-japan%2Bunsu...@googlegroups.com>にメールを送信してください。
> > 詳細については、http://groups.google.com/group/android-group-japan?hl=jaからこのグループにアクセスしてください。- 引用テキストを表示しない -
>
> - 引用テキストを表示 -

aharisu

unread,
Mar 31, 2010, 2:26:42 AM3/31/10
to android-g...@googlegroups.com

aharisuです。

同じことでハマった経験があるので、
その時に使ったコードを書いておきます。

具体的にはdeleteするときに、
予めクエリを発行してデータのIDを取得しそのIDで消去するといったことをします。

//------------------------------------------
File saveFile = new File(path); //pathには保存しようとしているファイルのフルパスが入っている
if(saveFile.exists()) {
//上書き保存の場合はデータベースの情報をいったん消す
String[] proj = {
MediaStore.Images.Media._ID,
MediaStore.Images.Media.DATA,
};
Cursor cursor = activity.managedQuery(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
proj,
MediaStore.Images.Media.DATA + " = ?",
new String[] { path }, 
null);
if(cursor.getCount() != 0) {
cursor.moveToFirst();
Uri deleteUri = ContentUris.appendId(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI.buildUpon(),
cursor.getLong(cursor.getColumnIndex(MediaStore.Images.Media._ID))).build();
activity.getContentResolver().delete(delete, null, null);
}
}
//--------------------------------------------

このようにdeleteした後、
普通に画像を保存・DBに登録といった手順でOKのはずです。



2010年3月31日14:59 asaka <beny...@gmail.com>:

asaka

unread,
Mar 31, 2010, 2:49:04 AM3/31/10
to 日本Androidの会
aharisuさん

ありがとうございます。解決できました。

ContentResolverの使用方法がリファレンスを
見ても良く分からなく困っていました。

ありがとうございました。


On 3月31日, 午後3:26, aharisu <foo.yob...@gmail.com> wrote:
> aharisuです。
>
> 同じことでハマった経験があるので、
> その時に使ったコードを書いておきます。
>
> 具体的にはdeleteするときに、
> 予めクエリを発行してデータのIDを取得しそのIDで消去するといったことをします。
>
> //------------------------------------------
> File saveFile = new File(path); //pathには保存しようとしているファイルのフルパスが入っている
> if(saveFile.exists()) {
> //上書き保存の場合はデータベースの情報をいったん消す
> String[] proj = {
> MediaStore.Images.Media._ID,
> MediaStore.Images.Media.DATA,};
>
> Cursor cursor = activity.managedQuery(
> MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
> proj,
> MediaStore.Images.Media.DATA + " = ?",
> new String[] { path },
> null);
> if(cursor.getCount() != 0) {
> cursor.moveToFirst();
> Uri deleteUri = ContentUris.appendId(
> MediaStore.Images.Media.EXTERNAL_CONTENT_URI.buildUpon(),

> cursor.getLong(cursor.getColumnIndex(MediaStore.Images.Media._ID))).build()-;


> activity.getContentResolver().delete(delete, null, null);}
> }
>
> //--------------------------------------------
>
> このようにdeleteした後、
> 普通に画像を保存・DBに登録といった手順でOKのはずです。
>

> 2010年3月31日14:59 asaka <beny0...@gmail.com>:

> > <android-gro-up-japan%2Bunsu...@googlegroups.com<android-gro-up-japan%2-52Buns...@googlegroups.com>


> > >にメールを送信してください。
> > > >> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja
> > からこのグループにアクセスしてください。
>

> > > > --
> > > > このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> > > > このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> > > > このグループから退会するには、android-group-j...@googlegroups.com<android-gro-up-japan%2Bunsu...@googlegroups.com>

> > <android-gro-up-japan%2Bunsu...@googlegroups.com<android-gro-up-japan%2-52Buns...@googlegroups.com>

Reply all
Reply to author
Forward
0 new messages