Кэширование изображений Picasso с использованием растрового изображения

Это содержимое этого метода loadImage никогда не вызывается, хотя я вызываю этот метод в OnActivityResult.

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
                   

person miraquee    schedule 09.11.2020    source источник
comment
какие журналы вы видите? Можете ли вы также опубликовать свои onCreate методы? (где вы звоните loadImage)   -  person snachmsm    schedule 09.11.2020
comment
На самом деле я вызываю метод в OnActivityResult, ранее для простоты я написал OnCreate. Хотя я надеюсь, что это ни на что не повлияет, так как тост работает нормально, и все остальные строки также работают нормально.   -  person miraquee    schedule 09.11.2020
comment
И мои журналы не отображаются так, как ожидалось строкой в ​​методе loadImage.   -  person miraquee    schedule 09.11.2020


Ответы (1)


Не используйте для журналов TAG, разделенные пробелами. Попробуйте заменить ваш "Check Bitmap" чем-нибудь из одного слова (например, Checkere). После этого вы сможете увидеть свой журнал в 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();

Надеюсь, это поможет!

person Arpit Anand    schedule 09.11.2020