林'使用FirebaseUI和Recycler View并从Firebase存储加载图像。当我试图用另一个图像替换图像时,我收到了错误。
当我退出片段并再次返回时,图像显示,错误发生在我更改图像的同一片段中。
我尝试使用adapter.wait()
和adapter.notifyDataSetChanged()
,但仍然遇到了这个错误。完整的错误是:
E/StorageException: StorageException has occurred.
Object does not exist at location.
Code: -13010 HttpResult: 404
E/StorageException: { "error": { "code": 404, "message": "Not Found. Could not get object" }}
java.io.IOException: { "error": { "code": 404, "message": "Not Found. Could not get object" }}
at bvk.a(:com.google.android.gms.DynamiteModulesC:424)
at bvk.a(:com.google.android.gms.DynamiteModulesC:1404)
at bve.onTransact(:com.google.android.gms.DynamiteModulesC:53)
at android.os.Binder.transact(Binder.java:380)
at com.google.android.gms.internal.zzans$zza$zza.zzuj(Unknown Source)
at com.google.android.gms.internal.zzanv.zza(Unknown Source)
at com.google.android.gms.internal.zzanm.zza(Unknown Source)
at com.google.android.gms.internal.zzanm.zzd(Unknown Source)
at com.google.firebase.storage.zzb.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
我的代码就是这样:
protected void populateViewHolder(final ReportViewHolder viewHolder, final Report report, final int position) {
viewHolder.txtTitle.setText(report.title);
viewHolder.txtMessage.setText(report.message);
viewHolder.txtDate.setText(report.date);
viewHolder.txtuserName.setText(report.userName);
viewHolder.btnImg.setImageBitmap(null);
mStorage.child("Images/" + report.key + "/" + report.imageName).getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
Picasso.with(getContext()).load(uri).into(viewHolder.btnImg);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
// Handle any errors
}
});
btnUpdate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String Title=title.getText().toString();//get text from EditText
final String msg= message.getText().toString();
Query query= mDatabaseReference.child("user-reports/"+userID).orderByKey().equalTo(report.key);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot)
{
for (DataSnapshot snapshot: dataSnapshot.getChildren())
{
snapshot.getRef().setValue(new Report(report.userName,report.date, Title, msg, report.key,
targetUri.getLastPathSegment()));
update_img(report.key, report.imageName);
mDatabaseReference.child("reports/"+ report.key).setValue(new Report(report.userName,report.date, Title, msg, report.key,
targetUri.getLastPathSegment()));
dialog.dismiss();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
});
更新的功能是:
public void update_img(String key, String imageName)
{
// Get the data from an ImageView as bytes
imgView.setDrawingCacheEnabled(true);
imgView.buildDrawingCache();
Bitmap bitmap = imgView.getDrawingCache();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] data2 = baos.toByteArray();
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
LayoutInflater inflater = getActivity().getLayoutInflater();
builder.setCancelable(false);
final View view = inflater.inflate(R.layout.progbar, null);
builder.setView(view);
TextView progTitle = (TextView) view.findViewById(R.id.progTitle);
progTitle.setText("wait to update");
final Dialog progDialog = builder.create();
progDialog.show();
if(targetUri != null) {
mStorage.child("Images/" + key + "/" + imageName).delete(); // Delete the old image of the user
StorageReference filepathRef = mStorage.child("Images/"+ key).child(targetUri.getLastPathSegment()); // Add the new image of the user
UploadTask uploadTask = filepathRef.putBytes(data2);
uploadTask.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
// Handle unsuccessful uploads
}
}).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
progDialog.cancel();
Toast.makeText(getContext(), "success", Toast.LENGTH_SHORT).show();
}
});
}
}
希望你知道该怎么做,因为我真的不知道我还能做些什么。