图片从Firebase变回空白

时间:2019-12-13 16:28:54

标签: java android firebase firebase-realtime-database android-recyclerview

我已经找了几天,无法弄清楚为什么我的图像以空白形式出现在Firebase上。我正在使用Picasso库,并按照所有步骤进行操作,并在这里进行了查看,但仍然没有运气。从我所看到的,我认为可能是下载URL。请帮忙。
这就是我要显示图像的地方:

package com.example.myapplication;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;

import java.util.ArrayList;
import java.util.List;

public class GalleryActivity extends AppCompatActivity {
    StorageReference mountainsRef;
    private StorageReference mStorage;
    private RecyclerView mRecyleview;
    private DatabaseReference databaseReference;
    private List<Upload> mUploads;
    private imageAdapter mAdapter;


    FirebaseStorage storage = FirebaseStorage.getInstance();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_gallery);
        mRecyleview = findViewById(R.id.recycler_view);
        mRecyleview.setHasFixedSize(true);
        mRecyleview.setLayoutManager(new LinearLayoutManager(this));
        mUploads = new ArrayList<>();
        databaseReference = FirebaseDatabase.getInstance().getReference("Image");
        DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
        DatabaseReference commandsRef = rootRef.child("drones").child("commands");

        databaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for(DataSnapshot postSnapshot: dataSnapshot.getChildren()){
                    Upload upload = new Upload();
                     String.valueOf(postSnapshot.child("Image").getValue(Upload.class));
                     mUploads.add(upload);
                }
                mAdapter = new imageAdapter(GalleryActivity.this,mUploads);

                mRecyleview.setAdapter(mAdapter);

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                Toast.makeText(GalleryActivity.this, databaseError.getMessage(), Toast.LENGTH_LONG).show();

            }
        });





    }
}
package com.example.myapplication;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.squareup.picasso.MemoryPolicy;
import com.squareup.picasso.NetworkPolicy;
import com.squareup.picasso.Picasso;

import java.util.List;

public class imageAdapter extends RecyclerView.Adapter<imageAdapter.ImageViewHolder> {
    private Context mContext;
    private List<Upload> mUploads;

    public imageAdapter(Context context, List<Upload> uploads){
        mContext = context;
        mUploads = uploads;

    }


    @NonNull
    @Override
    public ImageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(mContext).inflate(R.layout.image_item1,parent, false);
        return new ImageViewHolder(v);
    }

        @Override
        public void onBindViewHolder(@NonNull ImageViewHolder holder, int position) {
            Upload uploadCurrent = mUploads.get(position);
            Picasso.get().load(uploadCurrent.getImageUrl()).error(R.drawable.bgitem).noFade()
                    .memoryPolicy(MemoryPolicy.NO_CACHE).networkPolicy(NetworkPolicy.NO_CACHE).centerCrop().into(holder.imageView);

        }

    @Override
    public int getItemCount() {
        return mUploads.size();
    }

    public class ImageViewHolder extends RecyclerView.ViewHolder{
        public ImageView imageView;

        public ImageViewHolder(@NonNull View itemView) {
            super(itemView);
            imageView = itemView.findViewById(R.id.image_view_upload);
        }
    }
}

这是我上传图片的主要活动的代码段。

 public void onActivityResult(int requestCode, int resultCode, Intent data){
        super.onActivityResult(requestCode, resultCode, data);

        if(requestCode == Camera_Request_Code && resultCode == RESULT_OK){
            //progressDialog.setMessage("Uploading Image");
            //progressDialog.show();
            Bundle bundle = data.getExtras();
            Bitmap bm = (Bitmap) bundle.get("data");
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            bm.compress(Bitmap.CompressFormat.JPEG, 100, baos);
            byte[] image = baos.toByteArray();


            UploadTask uploadTask = mountainsRef.putBytes(image);

            uploadTask.addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception exception) {
                    // Handle unsuccessful uploads
                    Toast.makeText(MainActivity.this, "Upload Failed - "+exception.getMessage(), Toast.LENGTH_SHORT).show();
                }
            }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                    // taskSnapshot.getMetadata() contains file metadata such as size, content-type, etc.
                    // ...
                    mountainsRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                        @Override
                        public void onSuccess(Uri uri) {
                            Toast.makeText(MainActivity.this, "Upload Successful", Toast.LENGTH_SHORT).show();
                            String url = uri.toString();
                            String uploadID = databaseReference.push().getKey();
                            databaseReference.child(uploadID).setValue(url);
                        }
                    });

//                    Upload upload = new Upload(taskSnapshot.getMetadata().getReference().getDownloadUrl().toString());



                }
            });



        }
    }

0 个答案:

没有答案