使用位图缓存毕加索图像

时间:2020-11-09 06:59:33

标签: java android caching picasso image-caching

尽管我在 OnActivityResult 中调用此方法,但从未调用过 loadImage 方法的此内容。

public void loadImage(Uri uri){
    File file = new File(getApplicationContext().getExternalCacheDir().getAbsolutePath() + "/" +uid + ".jpg");
    Log.d("Check Bitmap", "file" + file);
    try {
        Picasso picasso = Picasso.get();
        Bitmap bitmap = picasso.load(uri).get();
        Log.d("Check Bitmap", "bitmap working");
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100,new FileOutputStream(file));
    } catch (Exception e) {
        Log.d("Check Bitmap", "bitmap not working, cached");
        e.printStackTrace();
    }

我的目的是从文件中检索图像。

这是我的 OnActivityResult

 @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode ==1000){
            {
                if(resultCode == Activity.RESULT_OK){
                    imageUri = data.getData();
                    Context context;
                    final ProgressDialog dialog = new ProgressDialog(myProfile.this);
                    dialog.setMessage("Uploading Image...");
                    dialog.show();
                    profilepic.setImageURI(imageUri);

                    ref.putFile(imageUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                                @Override
                                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                                    ref.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                                        @Override
                                        public void onSuccess(Uri uri) {
                                            final Picasso picasso = Picasso.get();
                                            picasso.setIndicatorsEnabled(true);
                                            picasso.load(uri).into(profilepic);
                                            downloadUri = uri;
                                            dialog.dismiss();
                                            Toast.makeText(getApplicationContext(), "Image Uploaded!", Toast.LENGTH_SHORT).show();


                                            loadImage(uri); //Here I call
                   

1 个答案:

答案 0 :(得分:1)

您不应在日志中使用用空格分隔的 TAG 。尝试用一个单词(例如“ Checkere”)代替"Check Bitmap"。然后,您将能够在Logcat中看到您的日志。 您需要将所有内容放入线程中。

这是 loadImage

的完整代码块
 public void loadImage(final Uri uri){
        Thread thread = new Thread() {
            @Override
            public void run() {
                Log.d("Checkere", "stuck at file");
                File file = new File(getCacheDir() + File.separator + uid + ".jpg");
                Log.d("Checkere", "file" + file);
                try {
                    Picasso picasso = Picasso.get();
                    Bitmap bitmap = picasso.load(uri).get();
                    Log.d("Checkere", "bitmap working");
                    FileOutputStream fOut = new FileOutputStream(file);
                    bitmap.compress(Bitmap.CompressFormat.PNG, 85, fOut);
                    fOut.flush();
                    fOut.close();
                } catch (Exception e) {
                    Log.d("Checkere", e.getMessage());
                    e.printStackTrace();
                }
            }};
        thread.start();
    }

请注意,我还在您的代码中添加了这两行。

fOut.flush(); 
fOut.close();

我希望这会有所帮助!