使用Firebase Android上传图像需要很长时间?

使用Firebase Android上传图像需要很长时间?,android,firebase,chat,firebase-storage,firebase-console,Android,Firebase,Chat,Firebase Storage,Firebase Console,使用Firebase上载图像的代码: Button btnUpload = (Button)findViewById(R.id.btn_upload_image); btnUpload.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = n

使用Firebase上载图像的代码:

    Button btnUpload = (Button)findViewById(R.id.btn_upload_image);
        btnUpload.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                intent.setType("image/jpeg");
                intent.putExtra(Intent.EXTRA_LOCAL_ONLY,true);
                startActivityForResult(Intent.createChooser(intent,getString(R.string.str_complete_action)),RC_PHOTO_PICKER);
            }
        });

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
 if(requestCode == RC_PHOTO_PICKER && resultCode == RESULT_OK)
        {
            pbLoader.setVisibility(View.VISIBLE);
            Uri selectedImageUri = data.getData();
            StorageReference photoReference = mStorageReference.child(getString(R.string.str_images)+selectedImageUri.getLastPathSegment());
            photoReference.putFile(selectedImageUri).addOnSuccessListener(this, new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                    Uri downloadUri = taskSnapshot.getDownloadUrl();
                    MessageModelClass messageModelClass = new MessageModelClass();
                    messageModelClass.setImageUrl(downloadUri.toString());
                    messageModelClass.setmMessage(null);
                    messageModelClass.setmUserName(userName);
                    mDatabaseReference.push().setValue(messageModelClass);
                    messageAdapter.notifyDataSetChanged();
                }
            }).addOnFailureListener(this, new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Log.d(TAG,"onFailure:"+e.getMessage());
                }
            }).addOnCompleteListener(this, new OnCompleteListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
                   // messageAdapter.notifyDataSetChanged();
                    pbLoader.setVisibility(View.GONE);
                    Log.d(TAG,"onComplete:");
                }
            });
        }

更改onBindViewHolder(),如下所示。然后它会解决你的问题

@Override
public void onBindViewHolder(final MessageAdapter.MyViewHolder holder, final int position) {
   final MessageModelClass messageModelClass = messageModelList.get(position);
   if(messageModelClass !=null)
   {
     if (messageModelClass.getmTimeDate() != null) {
        setTimeFormatInUI(messageModelClass.getmTimeDate(), holder);
     }
     if (messageModelClass.getImageUrl() != null) {
        holder.tvMessage.setVisibility(View.GONE);
        holder.ivPhoto.setVisibility(View.VISIBLE);
        holder.ivPhoto.setTag(messageModelClass.getmKey());
            Picasso.with(context).load(messageModelClass.getImageUrl()).into(holder.ivPhoto);
    } else {
        holder.ivPhoto.setVisibility(View.GONE);
        holder.tvMessage.setVisibility(View.VISIBLE);
        holder.tvMessage.setTag(messageModelClass.getmKey());
        holder.tvMessage.setText(messageModelClass.getmMessage());
    }
    if(messageModelClass.getmUserName() != null)
    {
                if(userName.equals(messageModelClass.getmUserName()))
                {
                    holder.tvUserName.setText("You");
                }
                else
                {
                    holder.tvUserName.setText(messageModelClass.getmUserName());
                }
   }
   else
   {
     //set all your holer element to visibility gone
     //eg. holder.tvUserName.setVisibility(View.GONE);
   }

}

你的代码是这样的。因为您在只需要notifyItemInserted之前设置了适配器,所以不要再次设置适配器

@Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            MessageModelClass messageModelClass = dataSnapshot.getValue(MessageModelClass.class);
            messageModelClass.setmKey(dataSnapshot.getKey());
            messageList.add(messageModelClass);

           messageAdapter.notifyItemInserted(messageList.size()-1);
        }

请上传你的回收器code@SagarPatil请检查codechange
messageAdapter.notifyDataSetChanged()
to
mesageadapter.notifyItemInserted()
我这样做了,但在上传他们在RecycleService中显示两次的图像时仍然无效在将其传递到recycler视图之前检查您的arraylist。或者卸载应用程序并再次检查。当我上传图像时,请帮助我。我的听众被呼叫了两次。mChildEventListener=new ChildEventListener(){@Override public void onchildaded(DataSnapshot DataSnapshot,String s){您可以发布ChildEventListener()的代码,并在设置映像时对其进行编码。在'mChildEventListener=new ChildEventListener()之前'使用类级布尔变量并将其设置为true。与private'boolean isFirstTime=true;'和'public void onchildaded(DataSnapshot DataSnapshot,String s){if(isFirstTime){isFirstTime=false;return;}//ur代码的其余部分}@Abhidshek Singh我需要在messageAdapter.notifyItemInserted(int position);@Erum只需修改onChild方法,与我的代码相同。当我使用recyclerview时,它在该方法中请求位置notifyItemInserted?@Erum
messageAdapter.notifyItemInserted(messageList.size()-1);
@Override
public void onBindViewHolder(final MessageAdapter.MyViewHolder holder, final int position) {
   final MessageModelClass messageModelClass = messageModelList.get(position);
   if(messageModelClass !=null)
   {
     if (messageModelClass.getmTimeDate() != null) {
        setTimeFormatInUI(messageModelClass.getmTimeDate(), holder);
     }
     if (messageModelClass.getImageUrl() != null) {
        holder.tvMessage.setVisibility(View.GONE);
        holder.ivPhoto.setVisibility(View.VISIBLE);
        holder.ivPhoto.setTag(messageModelClass.getmKey());
            Picasso.with(context).load(messageModelClass.getImageUrl()).into(holder.ivPhoto);
    } else {
        holder.ivPhoto.setVisibility(View.GONE);
        holder.tvMessage.setVisibility(View.VISIBLE);
        holder.tvMessage.setTag(messageModelClass.getmKey());
        holder.tvMessage.setText(messageModelClass.getmMessage());
    }
    if(messageModelClass.getmUserName() != null)
    {
                if(userName.equals(messageModelClass.getmUserName()))
                {
                    holder.tvUserName.setText("You");
                }
                else
                {
                    holder.tvUserName.setText(messageModelClass.getmUserName());
                }
   }
   else
   {
     //set all your holer element to visibility gone
     //eg. holder.tvUserName.setVisibility(View.GONE);
   }

}
@Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            MessageModelClass messageModelClass = dataSnapshot.getValue(MessageModelClass.class);
            messageModelClass.setmKey(dataSnapshot.getKey());
            messageList.add(messageModelClass);

           messageAdapter.notifyItemInserted(messageList.size()-1);
        }