Sorry to talk t myself on this thread, but in case anyone else runs
into this problem in 1.0R1, the current workaround is to set the
ImageURI to null and then back to the URI after saving the image.

http://code.google.com/p/android/issues/detail?id=925


On Oct 1, 1:02 pm, Joe Erickson <[EMAIL PROTECTED]> wrote:
> Found the link to the bug tracker.  So, nevermind.  It was on the
> front page. :)
>
> On Oct 1, 12:16 pm, Joe Erickson <[EMAIL PROTECTED]> wrote:
>
> > No one else has seen anything like this?  Is there a way to enter this
> > as a bug against the Android codebase?  I haven't actually seen the
> > open source part of this yet (I'd actually try and fix it if it was
> > out there already).
>
> > On Sep 29, 11:09 am, Joe Erickson <[EMAIL PROTECTED]> wrote:
>
> > > I'm seeing some caching problems when using anImageButtonwith a Uri
> > > and I'm not sure if there's a flag that needs set somewhere or not.
>
> > > I'm using the button to add an icon to an item in one of my
> > > applications, exactly like it's being used for the Contact application
> > > (which I don't think the source is available for).  I'm using the CROP
> > > trick seen in this 
> > > application:http://code.google.com/p/apps-for-android/source/browse/trunk/Photost...
>
> > > Specifically, I'm calling the image picker and then the crop like so:
>
> > > protected OnClickListener cmdIconListener = new OnClickListener() {
> > >     // @Override
> > >         public void onClick(View arg0) {
> > >             Intent i = new
> > > Intent("android.intent.action.GET_CONTENT");
> > >             i.setType("image/*");
> > >             startActivityForResult(i, AddTea.ADD_ICON);
> > >         }
>
> > > };
>
> > > protected void onActivityResult(int requestCode, int resultCode,
> > > Intent data){
> > >     // See which child activity is calling us back.
> > >     switch (requestCode) {
> > >     case AddTea.ADD_ICON:
> > >         // This is the standard resultCode that is sent back if the
> > >         // activity crashed or didn't doesn't supply an explicit
> > > result.
> > >         if (resultCode != RESULT_CANCELED){
> > >              Intent i = new Intent("com.android.camera.action.CROP");
> > >              i.setClassName("com.android.camera",
> > > "com.android.camera.CropImage");
> > >              i.setData(data.getData());
> > >              Log.d(TAG, "path: " + data.getData().getPath());
> > >              i.putExtra("noFaceDetection", true);
> > >              i.putExtra("outputX", iconWidth);
> > >              i.putExtra("outputY", iconHeight);
> > >              i.putExtra("aspectX", iconWidth);
> > >              i.putExtra("aspectY", iconHeight);
> > >              i.putExtra("scale", true);
>
> > >              if(iconUri == null){
> > >                  ContentValues values = new ContentValues();
>
> > > values.put(android.provider.MediaStore.Images.Media.TITLE, name + "
> > > Icon");
>
> > > values.put(android.provider.MediaStore.Images.Media.BUCKET_ID,
> > > "STeaP_Tea_Timer_Icons");
>
> > > values.put(android.provider.MediaStore.Images.Media.BUCKET_DISPLAY_NAME,
> > > "STeaP Tea Timer Icons");
> > >                  iconUri =
> > > getContentResolver().insert(android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
> > > values).toString();
> > >               }
> > >               i.putExtra("output", Uri.parse(iconUri));
> > >               startActivityForResult(i, CROP_ICON);
> > >         }
> > >         break;
> > >     case AddTea.CROP_ICON:
> > >         if (resultCode != RESULT_CANCELED){
> > >         Log.d(TAG, "Data String: " + iconUri);
> > >         showIconButton(iconUri);
> > >     }
> > >     default:
> > >         break;
> > >     }
>
> > > }
>
> > > protected void showIconButton(String iconUri){
> > >     if(iconUri != null){
> > >        ImageButtoniconField = (ImageButton)
> > > findViewById(R.id.iconButton);
> > >         Log.d(TAG, "iconUri: " + iconUri);
> > >         iconField.setImageURI(Uri.parse(iconUri));
> > >         iconField.invalidate();
> > >     }
>
> > > }
>
> > > So if the item doesn't have an icon, set one in the ContentProvider
> > > and save the iconUri.  If it does, just overwrite it with the new
> > > cropped image.
>
> > > This works fine if the item never had an icon.  It shows in 
> > > theImageButtonwhen the Activity returns.  However, if the item already
> > > had an icon, my Activity still shows the old icon, even though it was
> > > overwritten.  It seems that if theImageButtongets the same Uri back,
> > > even if I wrote a new image to it, it doesn't redraw, even if I tell
> > > it to invalidate().  If I relaunch my Activity, the new image shows up
> > > just like I expected.  Funny enough, the Pictures application doesn't
> > > see any images I created until I restart the emulator, which also
> > > doesn't seem ideal!
>
> > > So, is there anyway to handle this caching of the Uri?  I seems like
> > > the ContentProvider should be doing this when I write a new image to
> > > it, but it doesn't seem to be.  Also, before anyone suggests, I tried
> > > deleteing the entry in the ContentProvider and making a new one and
> > > that seems to partially work.  It partilly works because, if the Uri
> > > we get back it new, the view does refresh with this new Uri.  However,
> > > if the icon was the last picture to be saved to the ContentProvider,
> > > say item 10, then the ContentProvider will delete item 10 and the
> > > reuses 10 as the next id!  So I'm back where I started and 
> > > theImageButtonshows the old icon.
>
> > > Any help in kicking the ContentProvider ofImageButtoninto shape
> > > would be appreciated.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
[EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to