2017-01-06 1 views
0

J'ai fait un Activity dans lequel l'utilisateur choisit l'image de la galerie et mettre cette image dans la circulaire ImageView, voici ma partie du code:Android Profile Image

public void loadImagefromGallery(View view) { 
Intent galleryIntent = new Intent(Intent.ACTION_PICK, 
     android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);  //camera intent 
startActivityForResult(galleryIntent, RESULT_LOAD_IMG); 


} 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
super.onActivityResult(requestCode, resultCode, data); 
try { 
    if (requestCode == RESULT_LOAD_IMG && resultCode == RESULT_OK 
      && null != data) { 
     Uri pickedImage = data.getData(); 
     // Let's read picked image path using content resolver 
     String[] filePath = {MediaStore.Images.Media.DATA}; 
     Cursor cursor = getContentResolver().query(pickedImage, filePath, null, null, null); 
     cursor.moveToFirst(); 
     String imagePath = cursor.getString(cursor.getColumnIndex(filePath[0])); 

     BitmapFactory.Options options = new BitmapFactory.Options(); 
     options.inPreferredConfig = Bitmap.Config.ARGB_8888; 

     cursor.close(); 
     Bitmap bitmap = BitmapFactory.decodeFile(imagePath, options); 
     // imgView = (de.hdodenhof.circleimageview.CircleImageView) findViewById(R.id.ivprofileimg); 

     ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
     bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
     byte[] byteArrayImage = baos.toByteArray(); 
     encodedImage = Base64.encodeToString(byteArrayImage, Base64.DEFAULT); 
     new saveprofileimage().execute(custid, encodedImage); 

    } else { 
     Toast.makeText(this, "You haven't picked Image", 
       Toast.LENGTH_LONG).show(); 
    } 

} catch (Exception e) { 
    Toast.makeText(this, "Something went wrong", Toast.LENGTH_LONG) 
      .show(); 
} 

} 


class saveprofileimage extends AsyncTask<String, Void, Void> { 
@Override 
protected void onPreExecute() { 
    pdilog = new ProgressDialog(MyProfile.this); 
    //  pdilog.setMessage("Please Wait...."); 
    pdilog.show(); 
    super.onPreExecute(); 
} 


@Override 
protected Void doInBackground(String... params) { 
    try { 
     response = SaveProfileImage.getJSONfromURL(params[0] + " ", params[1]); 
     JSONObject _jobject = new JSONObject(response); 
     serverresult = _jobject.getString("Result"); 
     profileimagee = _jobject.getString("ProfileImage"); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 


@Override 
protected void onPostExecute(Void result) { 
    pdilog.dismiss(); 
    if (serverresult.equals("Success")) { 
     Picasso.with(MyProfile.this) 
       .load(profileimagee) 
       .into(imgView); 
     new customerprofiledetails().execute(custid); 
    } else { 
     Toast.makeText(MyProfile.this, "Image couldn't be saved", Toast.LENGTH_LONG).show(); 
    } 

    super.onPostExecute(result); 

} 
} 

Le problème est que lorsque l'image est déjà là dans le ImageView et après que j'essaye de mettre à jour l'image, l'image ne soit pas mise à jour mais quand l'utilisateur ferme et rouvre l'application, l'image mise à jour est là dans ImageView, Je veux est chaque fois que je tape sur le ImageView et choisit une image, il est mis à jour sur place en quelques secondes, il devrait pas être nécessaire d'ouvrir à nouveau l'application, me suggérer dès que possible

+5

cache claire de picasso et que d'essayer à nouveau –

Répondre

2

essayez ceci:

public class PicassoTools { 

    public static void clearCache (Picasso p) { 
     p.cache.clear(); 
    } 
} 

appel à l'aide:

PicassoTools.clearCache(Picasso.with(context)); 

vous pouvez aussi essayer:

Picasso.with(MyProfile.this) 
     .load(profileimagee) 
     .memoryPolicy(MemoryPolicy.NO_CACHE) 
     .networkPolicy(NetworkPolicy.NO_CACHE) 
     .into(imgView); 

il actualisera automatiquement le fichier.

1

l'intérieur de votre onPostExecute juste comme modifier ci-dessous

@Override 
    protected void onPostExecute(Void result) { 
     pdilog.dismiss(); 
     if (serverresult.equals("Success")) { 
      Picasso.with(MyProfile.this) 
        .load(profileimagee) 
        .into(imgView); 
     finish(); 
     startActivity(getApplicationContext(),YourActivityName.class); 
     } 
+0

je l'ai déjà essayé cette ,,, Doesnt travail – neha

2

Il est à cause du cache local résidant dans la mémoire Android. Essayez d'effacer le cache.

+0

merci beaucoup, .. – neha

2

effacer le cache de picasso. Si vous n'effacez pas la mémoire cache, elle charge l'image à partir de la mémoire cache. ou essayez ce code:

Glide.with(getApplicationContext()).load("image_url") 
.thumbnail(0.5f) 
.crossFade() 
.diskCacheStrategy(DiskCacheStrategy.NONE) 
.skipMemoryCache(true) 
.listener(new RequestListener<String, GlideDrawable>() { 
    @Override 
    public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) { 
     progressBar.setVisibility(View.GONE); 
     return false; 
    } 

    @Override 
    public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) { 
     progressBar.setVisibility(View.GONE); 
     return false; 
    } 
}) 

.into(profileImage);