【问题标题】:Unrecognized type of request: Request{com.google.android.gms.tasks.zzu@5843814无法识别的请求类型:Request{com.google.android.gms.tasks.zzu@5843814
【发布时间】:2018-12-10 02:23:50
【问题描述】:

我正在尝试从我的数据库引用中将图像加载到我的 Firebase 存储中。然后我使用 Picasso(实现 'com.squareup.picasso:picasso:2.71828')从数据库引用中检索图像。我正在使用的全部代码可以在这里找到https://github.com/kshitiz1007/Lets-Chat,尽管更新了库并稍微更新了 ui。但是需要注意的两个文件是 SettingActivity,用户选择个人资料图像和文本状态以放入数据库和 ProfileActivity,其中个人资料图像被 Picasso 调用。

我的理解是,在 SettingActivity 中,个人资料图像以及个人资料图像的拇指大小版本都被保存到 SettingActivity 中的哈希图:

update_HashMap.put("image",downloadUrl); 
update_HashMap.put("thumb_image",thumb_download_url);
//--------ADDING URL INTO DATABASE REFERENCE-------
mDatabaseReference.updateChildren(update_HashMap).addOnCompleteListener(new 

我的问题是,毕加索调用加载时调用,显示源图像 (String display_image = dataSnapshot.child("image").getValue().toString();) 永远不会加载。

但我不知道机制,也不知道如何使用 Firebase 数据库引用从存储中检索图像。当毕加索试图从数据库引用中获取图像时,它会在运行中显示

Log

D/毕加索:主要创作 [R22] 请求{com.google.android.gms.tasks.zzu@5843814} ...
D/Picasso:主要错误 [R22]+246ms 无法识别的请求类型: 请求{com.google.android.gms.tasks.zzu@5843814}

Firebase Database

Firebase Storage

如果您查看第二张图片,图片似乎有一个指向任务的指针,而毕加索不知道如何使用该信息。

以下来自 SettingActivity.java

public class SettingActivity extends AppCompatActivity {

...

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

        super.onActivityResult(requestCode, resultCode, data);

        //-----STARTING GALLERY----
        if(requestCode == GALLERY_PICK && resultCode == RESULT_OK){

            Uri sourceUri = data.getData();

            //-------CROPPING IMAGE AND SETTING MINIMUM SIZE TO 500 , 500------
            CropImage.activity(sourceUri).
                    setAspectRatio(1,1).
                    setMinCropWindowSize(500,500).
                    start(SettingActivity.this);

        }

        //------START CROP IMAGE ACTIVITY------
        if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE ) {

            //------CROP IMAGE RESULT------
            CropImage.ActivityResult result = CropImage.getActivityResult(data);

            if (resultCode == RESULT_OK) {

                mProgressDialog.setTitle("Uploading Image");
                mProgressDialog.setMessage("Please wait while we process and upload the image...");
                mProgressDialog.setCancelable(false);
                mProgressDialog.setProgress(ProgressDialog.STYLE_SPINNER);
                mProgressDialog.show();

                Uri resultUri = result.getUri();
                File thumb_filepath = new File(resultUri.getPath());
                try {

                    //--------COMPRESSING IMAGE--------
                    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);
                     thumb_bytes= baos.toByteArray();


                } catch (Exception e) {
                    e.printStackTrace();
                }

                final StorageReference filepath        = mStorageReference.child("profile_image").child(uid+".jpg");
                final StorageReference thumb_file_path = mStorageReference.child("profile_image").child("thumbs").child(uid+".jpg");

                //------STORING IMAGE IN FIREBASE STORAGE--------
                filepath.putFile(resultUri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {

                        if(task.isSuccessful()){

                            @SuppressWarnings("VisibleForTests")
                            final String downloadUrl=  filepath.getDownloadUrl().toString();
                            final UploadTask uploadTask = thumb_file_path.putBytes(thumb_bytes);

                            //---------- STORING THUMB IMAGE INTO STORAGE REFERENCE --------
                            uploadTask.addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
                                @Override
                                public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> thumb_task) {
                                    @SuppressWarnings("VisibleForTests")
                                    String thumb_download_url = uploadTask.getSnapshot().getMetadata().getReference().getDownloadUrl().toString();
                                    // String thumb_download_url = thumb_task.getResult().getDownloadUrl().toString();
                                    if(thumb_task.isSuccessful()){
                                        Map update_HashMap=new HashMap();

                                        // Download Url stored to HashMap but where is this HashMap and how does it reference storage from database
                                        update_HashMap.put("image",downloadUrl);
                                        update_HashMap.put("thumb_image",thumb_download_url);

                                        //--------ADDING URL INTO DATABASE REFERENCE--------
                                        mDatabaseReference.updateChildren(update_HashMap).addOnCompleteListener(new OnCompleteListener<Void>() {
                                            @Override
                                            public void onComplete(@NonNull Task<Void> task) {

                                                if(task.isSuccessful()){
                                                    mProgressDialog.dismiss();
                                                    Toast.makeText(SettingActivity.this, "Uploaded Successfuly...", Toast.LENGTH_SHORT).show();

                                                }
                                                else{
                                                    mProgressDialog.dismiss();
                                                    Toast.makeText(getApplicationContext(), " Image is not uploading...", Toast.LENGTH_SHORT).show();

                                                }

                                            }
                                        });

                                    }
                                    else{
                                        mProgressDialog.dismiss();
                                        Toast.makeText(getApplicationContext(), " Error in uploading Thumbnail..", Toast.LENGTH_SHORT).show();
                                    }
                                }
                            });


                        }
                        else{
                            mProgressDialog.dismiss();
                            Toast.makeText(getApplicationContext(), " Image is not uploading...", Toast.LENGTH_SHORT).show();
                        }
                    }
                });

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

                Exception error = result.getError();
            }
        }
    }
}

以下来自 ProfileActivity.java

mfriendReqReference     = FirebaseDatabase.getInstance().getReference().child("friend_request");
mDatabaseReference      = FirebaseDatabase.getInstance().getReference().child("users").child(user_id);
mFriendDatabase         = FirebaseDatabase.getInstance().getReference().child("friends");
mNotificationReference  = FirebaseDatabase.getInstance().getReference().child("notifications");
mRootReference          = FirebaseDatabase.getInstance().getReference();
mFirebaseUser           = FirebaseAuth.getInstance().getCurrentUser();

//----fOR SETTING ONLINE---
getmDatabaseReference   = FirebaseDatabase.getInstance().getReference().child("users").child(mFirebaseUser.getUid());

mProgressDialog         = new ProgressDialog(ProfileActivity.this);
mProgressDialog.setTitle("Fetching Details");
mProgressDialog.setMessage("Please wait...");
mProgressDialog.setProgress(ProgressDialog.STYLE_SPINNER);
mProgressDialog.setCancelable(false);
mProgressDialog.show();

mCurrent_state = "not_friends"; // 4 types--- "not_friends" , "req_sent"  , "req_received" & "friends"

//----ADDING NAME , STATUS AND IMAGE OF USER----
mDatabaseReference.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        String display_name     = dataSnapshot.child("name").getValue().toString();
        String display_status   = dataSnapshot.child("status").getValue().toString();
        String display_image    = dataSnapshot.child("image").getValue().toString();

        mProfileName.setText(display_name);
        mProfileStatus.setText(display_status);

        Picasso.get()
                .load(display_image)
                .placeholder(R.drawable.user_img)
                .memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE)
                .into(mProfileImage);

        // ---------------------------------------------------------------------------------
        //https://stackoverflow.com/questions/46071230/use-glide-load-into-imageview-but-delay?rq=1
        /*RequestOptions requestOptions = new RequestOptions();
        requestOptions.placeholder(R.drawable.user_img);

        Glide.with(ProfileActivity.this)
                .setDefaultRequestOptions(requestOptions)
                .load(Uri.parse(display_image))
               // .placeholder(R.drawable.user_img)
                .into(mProfileImage);*/


        //----ADDING TOTAL  NO OF FRIENDS---
        mFriendDatabase.child(user_id).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                long len = dataSnapshot.getChildrenCount();
                mprofileFriendCount.setText("TOTAL FRIENDS : "+len);

                //----SEEING THE FRIEND STATE OF THE USER---
                //----ADDING THE TWO BUTTON-----
                mfriendReqReference.child(mFirebaseUser.getUid()).addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        //----CHECKING IF FRIEND REQUEST IS SEND OR RECEIVED----
                        if(dataSnapshot.hasChild(user_id)){

                            String request_type = dataSnapshot.child(user_id).child("request_type").getValue().toString();

                            if(request_type.equals("sent")){

                                mCurrent_state="req_sent";
                                mProfileSendReqButton.setText("Cancel Friend Request");
                                mProfileDeclineReqButton.setVisibility(View.INVISIBLE);
                                mProfileDeclineReqButton.setEnabled(false);

                            }

                            else if(request_type.equals("received")){
                                mCurrent_state="req_received";
                                mProfileSendReqButton.setText("Accept Friend Request");
                                mProfileDeclineReqButton.setVisibility(View.VISIBLE);
                                mProfileDeclineReqButton.setEnabled(true);
                            }

                            mProgressDialog.dismiss();
                        }

                        //---USER IS FRIEND----
                        else{

                            mFriendDatabase.child(mFirebaseUser.getUid()).addListenerForSingleValueEvent(new ValueEventListener() {
                                @Override
                                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                                    mProfileDeclineReqButton.setVisibility(View.INVISIBLE);
                                    mProfileDeclineReqButton.setEnabled(false);

                                    if(dataSnapshot.hasChild(user_id)){
                                        mCurrent_state="friends";
                                        mProfileSendReqButton.setText("Unfriend This Person");
                                    }
                                    mProgressDialog.dismiss();
                                }

                                @Override
                                public void onCancelled(@NonNull DatabaseError databaseError) {

                                    mProgressDialog.dismiss();
                                }
                            });

                        }
                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError databaseError) {
                        Toast.makeText(ProfileActivity.this, "Error fetching Friend request data", Toast.LENGTH_SHORT).show();
                    }
                });


            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
    }

【问题讨论】:

  • 我想通了。似乎问题出在 SettingActivity.java 中,我在更新已弃用的代码时为 downloadurl 输入了错误的引用。
  • 这听起来像是一个(基本)错字。如果确实如此,最好删除这个问题,因为它对其他人没有用处。
  • 我认为它会很有用,因为即使在修复了我两天前注意到的错误之后,我仍然得到同样的错误。获取 downloadurl 的旧方法都不起作用。这段代码很久以前就被弃用了,但当前的软件仍然在使用它。要获取downloadurl,请按照firebase.google.com/docs/storage/android/…的格式并使用final String downloadUrl = downloadUri.toString();
  • 如果您认为这很有用并且您已修复它,我建议您写一个答案,以便其他发现它的人可以从您的解决方案中受益。

标签: firebase firebase-realtime-database hashmap firebase-storage picasso


【解决方案1】:

上传here后获取downloadUrl的正确方法

【讨论】:

    猜你喜欢
    • 2016-08-10
    • 2013-02-19
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    • 1970-01-01
    • 2014-06-08
    • 2019-12-18
    相关资源
    最近更新 更多