簡體   English   中英

畢加索不顯示來自firebase的圖像

[英]picasso not displaying image from firebase

鏈接到數據庫結構我最近在我的應用程序中添加了一個功能,它允許用戶上傳個人資料圖片,該圖像存儲在 firebase 中,然后在應用程序中顯示給用戶。 圖像成功存儲在 firebase 中,但是當要顯示圖像時,它只會刪除默認顯示圖像並且不顯示任何內容。

公共類 SettingsActivity 擴展 AppCompatActivity {

private DatabaseReference mUserDatabase;
private FirebaseUser mCurrentUser;


//Android Layout

private CircleImageView mDisplayImage;
private TextView mName;
private TextView mStatus;

private Button mStatusBtn;
private Button mImageBtn;

private ProgressDialog mProgressDialog;

private static final int GALLERY_PICK = 1;

private StorageReference mImageStorage;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_settings);

    mDisplayImage = (CircleImageView) findViewById(R.id.settings_image);
    mName = (TextView) findViewById(R.id.settings_name);
    mStatus = (TextView) findViewById(R.id.settings_status);

    mStatusBtn = (Button) findViewById(R.id.settings_status_btn);
    mImageBtn = (Button) findViewById(R.id.settings_image_btn);
    mImageStorage = FirebaseStorage.getInstance().getReference();

    mCurrentUser = FirebaseAuth.getInstance().getCurrentUser();

    String current_uid = mCurrentUser.getUid();

    mUserDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child(current_uid);
    mUserDatabase.keepSynced(true);

    mUserDatabase.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            String name = dataSnapshot.child("name").getValue().toString();
            String status = dataSnapshot.child("status").getValue().toString();
            String image = dataSnapshot.child("image").getValue().toString();

            mName.setText(name);
            mStatus.setText(status);

            if (!image.equals("default")) {
                Picasso.with(SettingsActivity.this).load(image).into(mDisplayImage);

            } else {
                Picasso.with(SettingsActivity.this).load(image).placeholder(R.drawable.goodgolden).into(mDisplayImage);
            }


        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

    mStatusBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            String status_value = mStatus.getText().toString();

            Intent status_intent = new Intent(SettingsActivity.this, StatusActivity.class);
            status_intent.putExtra("status_value", status_value);
            startActivity(status_intent);

        }
    });

    mImageBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {


            Intent gallaryIntent = new Intent();
            gallaryIntent.setType("image/*");
            gallaryIntent.setAction(Intent.ACTION_GET_CONTENT);

            startActivityForResult(Intent.createChooser(gallaryIntent, "Select Image"), GALLERY_PICK);
            /*
            CropImage.activity()
                    .setGuidelines(CropImageView.Guidelines.ON)
                    .start(SettingsActivity.this);
            */

        }
    });

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == GALLERY_PICK && resultCode == RESULT_OK) {

        String imageUri = data.getDataString();

        CropImage.activity(Uri.parse(imageUri))
                .setAspectRatio(1, 1)
                .start(this);

        // Toast.makeText(SettingsActivity.this, imageUri, Toast.LENGTH_SHORT).show();

    }

    if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
        CropImage.ActivityResult result = CropImage.getActivityResult(data);
        if (resultCode == RESULT_OK) {


            mProgressDialog = new ProgressDialog((SettingsActivity.this));
            mProgressDialog.setTitle("Uploading");
            mProgressDialog.setMessage("Pleas Stand By");
            mProgressDialog.setCanceledOnTouchOutside(false);
            mProgressDialog.show();

            Uri resultUri = result.getUri();

            String current_user_id = mCurrentUser.getUid();

            StorageReference filepath = mImageStorage.child("profile_images").child(current_user_id + (".jpeg"));
            filepath.putFile(resultUri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {

                    if (task.isSuccessful()) {

                        String download_url = task.getResult().getStorage().getDownloadUrl().toString();
                        // dont know if this solution will work at 6:15 video

                        mUserDatabase.child("image").setValue(download_url).addOnCompleteListener(new OnCompleteListener<Void>() {
                            @Override
                            public void onComplete(@NonNull Task<Void> task) {

                                if (task.isSuccessful()) {

                                    mProgressDialog.dismiss();
                                    Toast.makeText(SettingsActivity.this, "Succesful Upload", Toast.LENGTH_LONG).show();
                                }

                            }
                        });


                    } else {
                        Toast.makeText(SettingsActivity.this, "Error Up Loading", Toast.LENGTH_SHORT).show();
                        mProgressDialog.dismiss();
                    }

                }
            });

        } else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) {
            Exception error = result.getError();
        }
    }
}


07-11 20:15:12.147 30329-30329/com.example.android.lapitchat E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.android.lapitchat, PID: 30329
java.lang.IllegalStateException: Center crop requires calling resize with positive width and height.
    at com.squareup.picasso.Request$Builder.build(Request.java:496)
    at com.squareup.picasso.RequestCreator.createRequest(RequestCreator.java:758)
    at com.squareup.picasso.RequestCreator.into(RequestCreator.java:709)
    at com.squareup.picasso.RequestCreator.into(RequestCreator.java:665)
    at com.example.android.lapitchat.SettingsActivity$1.onDataChange(SettingsActivity.java:84)
    at com.google.android.gms.internal.firebase_database.zzfc.zza(Unknown Source)
    at com.google.android.gms.internal.firebase_database.zzgx.zzdr(Unknown Source)
    at com.google.android.gms.internal.firebase_database.zzhd.run(Unknown Source)
    at android.os.Handler.handleCallback(Handler.java:751)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6247)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)

使用最新版本的畢加索作為 -

implementation 'com.squareup.picasso:picasso:2.71828'

Picasso.get().load(url).resize(100,100).centerCrop().into(imageView);

嘗試用這個替換代碼!!!

公共類 SettingsActivity 擴展 AppCompatActivity {

private DatabaseReference mUserDatabase;
private FirebaseUser mCurrentUser;

private CircleImageView mDisplayImage;
private TextView mName;
private TextView mStatus;

private Button mStatusBtn;
private Button mImageBtn;

private static final int GALLERY_PICK = 1;

// Storage Firebase
private StorageReference mImageStorage;

private ProgressDialog mProgressDialog;




@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_settings);

    mDisplayImage = (CircleImageView) findViewById(R.id.settings_image);
    mName = (TextView) findViewById(R.id.settings_name);
    mStatus = (TextView) findViewById(R.id.settings_status);

    mStatusBtn = (Button) findViewById(R.id.settings_status_btn);
    mImageBtn = (Button) findViewById(R.id.settings_image_btn);

    mCurrentUser = FirebaseAuth.getInstance().getCurrentUser();
    mImageStorage = FirebaseStorage.getInstance().getReference();

    String current_uid = mCurrentUser.getUid();

    mUserDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child(current_uid);
    mUserDatabase.keepSynced(true);

    mUserDatabase.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            String name = dataSnapshot.child("name").getValue().toString();
            final String image = dataSnapshot.child("image").getValue().toString();
            String status = dataSnapshot.child("status").getValue().toString();
            String thumb_image = dataSnapshot.child("thumb_image").getValue().toString();

            mName.setText(name);
            mStatus.setText(status);

            if(!image.equals("default")) {

                //Picasso.with(SettingsActivity.this).load(image).placeholder(R.drawable.default_avatar).into(mDisplayImage);

                Picasso.with(SettingsActivity.this).load(image).networkPolicy(NetworkPolicy.OFFLINE)
                        .placeholder(R.drawable.default_avatar).into(mDisplayImage, new Callback() {
                    @Override
                    public void onSuccess() {

                    }

                    @Override
                    public void onError() {

                        Picasso.with(SettingsActivity.this).load(image).placeholder(R.drawable.default_avatar).into(mDisplayImage);

                    }
                });

            }


        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }

    });
    mStatusBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            String status_value = mStatus.getText().toString();

            Intent status_intent = new Intent(SettingsActivity.this, StatusActivity.class);
            status_intent.putExtra("status_value", status_value);
            startActivity(status_intent);

        }
    });

    mImageBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {


            Intent galleryIntent = new Intent();
            galleryIntent.setType("image/*");
            galleryIntent.setAction(Intent.ACTION_GET_CONTENT);

            startActivityForResult(Intent.createChooser(galleryIntent, "SELECT IMAGE"), GALLERY_PICK);

        }
    });


}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if(requestCode == GALLERY_PICK && resultCode == RESULT_OK){

        Uri imageUri = data.getData();

        CropImage.activity(imageUri)
                .setAspectRatio(1, 1)
                .setMinCropWindowSize(500, 500)
                .start(this);

        //Toast.makeText(SettingsActivity.this, imageUri, Toast.LENGTH_LONG).show();

    }


    if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {

        CropImage.ActivityResult result = CropImage.getActivityResult(data);

        if (resultCode == RESULT_OK) {


            mProgressDialog = new ProgressDialog(SettingsActivity.this);
            mProgressDialog.setTitle("Uploading Image...");
            mProgressDialog.setMessage("Please wait while we upload and process the image.");
            mProgressDialog.setCanceledOnTouchOutside(false);
            mProgressDialog.show();


            Uri resultUri = result.getUri();

            File thumb_filePath = new File(resultUri.getPath());

            String current_user_id = mCurrentUser.getUid();


            Bitmap thumb_bitmap = new Compressor(this)
                    .setMaxWidth(200)
                    .setMaxHeight(200)
                    .setQuality(75)
                    .compressToBitmap(thumb_filePath);

            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            thumb_bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
            final byte[] thumb_byte = baos.toByteArray();


            StorageReference filepath = mImageStorage.child("profile_images").child(current_user_id + ".jpg");
            final StorageReference thumb_filepath = mImageStorage.child("profile_images").child("thumbs").child(current_user_id + ".jpg");



            filepath.putFile(resultUri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {

                    if(task.isSuccessful()){

                        final String download_url = task.getResult().getStorage().getDownloadUrl().toString();

                        UploadTask uploadTask = thumb_filepath.putBytes(thumb_byte);
                        uploadTask.addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
                            @Override
                            public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> thumb_task) {

                                String thumb_downloadUrl = thumb_task.getResult().getStorage().getDownloadUrl().toString();

                                if(thumb_task.isSuccessful()){

                                    Map update_hashMap = new HashMap();
                                    update_hashMap.put("image", download_url);
                                    update_hashMap.put("thumb_image", thumb_downloadUrl);

                                    mUserDatabase.updateChildren(update_hashMap).addOnCompleteListener(new OnCompleteListener<Void>() {
                                        @Override
                                        public void onComplete(@NonNull Task<Void> task) {

                                            if(task.isSuccessful()){

                                                mProgressDialog.dismiss();
                                                Toast.makeText(SettingsActivity.this, "Success Uploading.", Toast.LENGTH_LONG).show();

                                            }

                                        }
                                    });


                                } else {

                                    Toast.makeText(SettingsActivity.this, "Error in uploading thumbnail.", Toast.LENGTH_LONG).show();
                                    mProgressDialog.dismiss();

                                }


                            }
                        });



                    } else {

                        Toast.makeText(SettingsActivity.this, "Error in uploading.", Toast.LENGTH_LONG).show();
                        mProgressDialog.dismiss();

                    }

                }
            });



        } else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) {

            Exception error = result.getError();

        }
    }


}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM