2017-01-06 17 views
0

Я сделал Activity, в котором пользователь выбирает изображение из галереи и установить это изображение в круговом ImageView, вот моя часть кода:Android Изображение профиля

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); 

} 
} 

Проблема в том, что, когда изображение уже есть в ImageView, и после этого я пытаюсь обновить изображение, изображение не обновляется, но когда пользователь закрывает и открывает приложение, обновленное изображение находится в ImageView, . Я хочу, когда я нажимаю на ImageView и выбирает изображение, которое оно обновляет на месте всего за несколько секунд, должно быть не будет никакой необходимости, чтобы открыть приложение снова, предложить мне как можно скорее

+5

очистить кэш из Picasso и не пытаться снова –

ответ

2

попробовать это:

public class PicassoTools { 

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

вызов его с помощью:

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

вы также можете попробовать:

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

он автоматически обновит файл.

1

Внутри ваш onPostExecute просто изменить его, как показано ниже

@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

я уже пробовал это ,,, Doesnt работать – neha

2

Это из-за локальный кэш проживающего в андроиде памяти. Попробуйте очистить кеш.

+0

спасибо много, .. – neha

2

прозрачный кэш пикассо. Если вы не очистите кэш-память, загрузите изображение из кэш-памяти. или попробовать этот код:

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);