使用Firebase Android上传图像需要很长时间?
使用Firebase上载图像的代码:使用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
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()
tomesageadapter.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?@ErummessageAdapter.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);
}