在Firebase数据库的Imageview中显示存储在Firebase存储中的图像

时间:2018-08-31 06:00:00

标签: java android firebase firebase-realtime-database

我正在尝试显示已成功上传到firebase存储中的图像,并且其唯一ID也在Firebase数据库中的Imageview中的“ pics”下进行了更新,但是我尝试了多次,但是无法显示该图像或检索图像。

以下是我的Firebase数据库结构。 enter image description here

,我的Imageview是 enter image description here

应在何处显示图像以代替书架,这是默认图片,但不能这样做。 以下是我的上传活动

public class UploadBook extends AppCompatActivity {
    FirebaseDatabase database;
    EditText etAuthor, etbookDesc, etbookTitle, etName, etEmail, etMobile, etUniversity, etbookPrice;
    ImageView iv1;
    Button b1;
    AlertDialog.Builder builder1;
    DatabaseReference dbreference;
    String item = "start";  // for spinner
    FirebaseStorage storage;
    private static final int CAMERA_REQUEST_CODE = 1;
    StorageReference mStorageRef;
    FirebaseAuth fauth;
    int count = 0;
    Uri filePath = null;
    public Books b;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(com.nepalpolice.bookbazaar.R.layout.activity_upload_book);
        getSupportActionBar().setTitle("Upload book");

        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP)
            ActivityCompat.requestPermissions(UploadBook.this, new String[]{android.Manifest.permission.CAMERA, android.Manifest.permission.READ_EXTERNAL_STORAGE, android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 11);

        database = FirebaseDatabase.getInstance();
        dbreference = database.getReference();
        fauth = FirebaseAuth.getInstance();
        mStorageRef = FirebaseStorage.getInstance().getReference();
        iv1 = (ImageView) findViewById(com.nepalpolice.bookbazaar.R.id.itemImage1);

        etAuthor = (EditText) findViewById(com.nepalpolice.bookbazaar.R.id.editText1);
        etbookDesc = (EditText) findViewById(com.nepalpolice.bookbazaar.R.id.editText2);
        etbookTitle = (EditText) findViewById(com.nepalpolice.bookbazaar.R.id.editText3);
        etName = (EditText) findViewById(com.nepalpolice.bookbazaar.R.id.editText4);
        etEmail = (EditText) findViewById(com.nepalpolice.bookbazaar.R.id.editText5);
        etMobile = (EditText) findViewById(com.nepalpolice.bookbazaar.R.id.editText6);
        etUniversity = (EditText) findViewById(com.nepalpolice.bookbazaar.R.id.editText7);
        etbookPrice = (EditText) findViewById(com.nepalpolice.bookbazaar.R.id.editText8);
        b1 = (Button) findViewById(com.nepalpolice.bookbazaar.R.id.buttonPost);

        t3 t = new t3();
        t.execute();

        Spinner spinner = (Spinner) findViewById(com.nepalpolice.bookbazaar.R.id.spinner1);
        final String[] items = new String[]{"Select your category :", "Computer Science", "Electronics", "Mechanical", "Civil", "Electrical", "Mechatronics", "Software", "Others"};
        ArrayAdapter<String> spinneradapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, items);
        spinner.setAdapter(spinneradapter);
        spinner.setActivated(false);
        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
                item = adapterView.getItemAtPosition(position).toString();
                count = position;
                if (position == 0)
                    return;
                Toast.makeText(adapterView.getContext(), "Selected: " + item, Toast.LENGTH_LONG).show();
            }

            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {
            }
        });

        imageButtonclick();
        postButtonClick();

        builder1 = new AlertDialog.Builder(this);
        builder1.setMessage("Discard this item !");
        builder1.setCancelable(true);
        builder1.setPositiveButton("No", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                dialog.cancel();
            }
        });
        builder1.setNegativeButton("Yes", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                Intent in = new Intent(UploadBook.this, BooksPage.class);
                startActivity(in);
                finish();
                dialog.cancel();
            }
        });
    }

    void imageButtonclick() {
        iv1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                CropImage.activity(filePath).setGuidelines(CropImageView.Guidelines.ON)
                        .setAspectRatio(1,1).start(UploadBook.this);

                // Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                //intent.putExtra(MediaStore.EXTRA_OUTPUT,imageuri);
                //startActivityForResult(intent, CAMERA_REQUEST_CODE);
            }
        });
    }

    void postButtonClick() {
        b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (count == 0) {
                    Toast.makeText(UploadBook.this, "Please select a valid category", Toast.LENGTH_SHORT).show();
                    return;
                }
                if (!TextUtils.isDigitsOnly(etMobile.getText()) || etMobile.getText().toString().trim().length() != 10) {
                    Toast.makeText(UploadBook.this, "Please check number format !", Toast.LENGTH_SHORT).show();
                    return;
                }
                if (etAuthor.getText().toString().trim().length() > 0 && etbookDesc.getText().toString().trim().length() > 0
                        && etbookTitle.getText().toString().trim().length() > 0 && etName.getText().toString().trim().length() > 0
                        && etEmail.getText().toString().trim().length() > 0 && etMobile.getText().toString().trim().length() > 0
                        && etUniversity.getText().toString().trim().length() > 0 && etbookPrice.getText().toString().trim().length() > 0
                        && filePath!=null) {
                    String bauthor = etAuthor.getText().toString();
                    String bdesc = etbookDesc.getText().toString();
                    String btitle = etbookTitle.getText().toString();
                    String sellername = etName.getText().toString();
                    String selleremail = etEmail.getText().toString();
                    Long sellermobile = Long.parseLong(etMobile.getText().toString());
                    String selleruniversity = etUniversity.getText().toString();
                    Double bprice = Double.parseDouble(etbookPrice.getText().toString());

                    Toast.makeText(getApplicationContext(), "Your book will be uploaded shortly !", Toast.LENGTH_SHORT).show();
                    b = new Books(btitle, bauthor, bdesc, sellername, selleremail, sellermobile, item, selleruniversity, bprice);

                    String bookid = dbreference.child("books").child(item).push().getKey();
                    dbreference.child("books").child(item).child(bookid).setValue(b);

                    t2 t2 = new t2();
                    t2.execute(bookid);

                    Intent in = new Intent(UploadBook.this, BooksPage.class);
                    startActivity(in);
                    finish();


                } else {
                    Toast.makeText(UploadBook.this, "Please enter your complete details !", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
    @Override
    public void onBackPressed() {
        /*AlertDialog alert2 = builder1.create();
        alert2.show();*/
        CustomDialogClass cdd = new CustomDialogClass(UploadBook.this);
        cdd.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        cdd.show();
    }

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(requestCode == CAMERA_REQUEST_CODE && resultCode == RESULT_OK) {
            filePath = data.getData();
            iv1.setImageURI(filePath);
        }
        if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
            CropImage.ActivityResult result = CropImage.getActivityResult(data);
            if (resultCode == RESULT_OK) {
                Uri resultUri = result.getUri();

                iv1.setImageURI(resultUri);
                filePath = resultUri;

            } else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) {
                Exception error = result.getError();
            }
        }
    }

    class t2 extends AsyncTask<String,Integer,Boolean> {

        @Override
        protected Boolean doInBackground(final String... bookid) {
            if(filePath != null) {
                mStorageRef.child(bookid[0]).putFile(filePath).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {


                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                        Task<Uri> downloadUrl = taskSnapshot.getMetadata().getReference().getDownloadUrl();
                        Toast.makeText(UploadBook.this, "Upload successful", Toast.LENGTH_SHORT).show();

                        dbreference.child("books").child(item).child(bookid[0]).child("pics").setValue(downloadUrl.toString());
                    }
                })
                        .addOnFailureListener(new OnFailureListener() {
                            @Override
                            public void onFailure(@NonNull Exception e) {
                                Toast.makeText(UploadBook.this, "Upload Failed : " + e, Toast.LENGTH_SHORT).show();

                            }
                        });
            }
            return null;
        }
    }

    class t3 extends AsyncTask<String,Integer,Boolean>{

        @Override
        protected Boolean doInBackground(String... strings) {
            publishProgress();
            return null;
        }
        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);

            etName.setText(PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getString("name","Delault name"));
            etEmail.setText(PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getString("email","Default email"));
            etUniversity.setText(PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getString("university","Default university"));
            etMobile.setText(String.valueOf(PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getString("phone","Default phone")));
        }
    }

我的适配器类是

public class SubjectBooksAdapter extends RecyclerView.Adapter<SubjectBooksAdapter.MyViewHolder> {
    ArrayList<Books> bookslist;
    CardView cv;
    FirebaseAuth fauth;
    FirebaseDatabase database;
    DatabaseReference dbreference;
    Books b;

    public SubjectBooksAdapter(ArrayList<Books> bookslist){
        this.bookslist = bookslist;
    }

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

    public class MyViewHolder extends RecyclerView.ViewHolder {

        TextView bookName,bookAuthor,bookDesc,bookPrice,bookCall;
        ImageView iv;

        MyViewHolder(final View itemView) {
            super(itemView);
            cv = (CardView) itemView.findViewById(R.id.my_card_view);

            iv = (ImageView) itemView.findViewById(R.id.imageView);

            database = FirebaseDatabase.getInstance();
            dbreference = database.getReference("books");
            bookName = (TextView) itemView.findViewById(R.id.bookName);
            bookAuthor = (TextView) itemView.findViewById(R.id.bookAuthor);
            bookDesc = (TextView) itemView.findViewById(R.id.bookDesc);
            bookPrice = (TextView) itemView.findViewById(R.id.bookPrice);
            bookCall = (TextView) itemView.findViewById(R.id.bookCall);
            fauth = FirebaseAuth.getInstance();
        }
    }

    @Override
    public void onBindViewHolder(final MyViewHolder holder, final int position) {

        database = FirebaseDatabase.getInstance();
        dbreference = database.getReference("books");

        b = bookslist.get(position);
        holder.bookName.setText(b.getBname());
        holder.bookAuthor.setText(b.getBauthor());
        holder.bookDesc.setText(b.getBdesc());
        holder.bookPrice.setText("Rs. "+b.getPrice());
        holder.bookCall.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Log.e("Current user is ", fauth.getCurrentUser().getEmail());
                b = bookslist.get(position);
                String[] arr = {b.getSelleremail(),b.getSellername(),b.getBname(),b.getBauthor()};
                //Log.e("Seller is ",b.getSellername());
                Intent in = new Intent(v.getContext(),Chat.class);
                in.putExtra("seller",arr);
                v.getContext().startActivity(in);
            }
        });
        Glide.with(cv.getContext()).load(Uri.parse(b.getPics())).placeholder(R.drawable.bshelf).error(R.drawable.bshelf).into(holder.iv);

    }

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

请帮助。

这是我的整个项目 https://github.com/BlueYeti1881/Pustak

谢谢。

1 个答案:

答案 0 :(得分:0)

在UploadBook类中对此进行更改

if(filePath != null) {
    mStorageRef.child(bookid[0]).putFile(filePath).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
        @Override
        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
            Task<Uri> downloadUrl = taskSnapshot.getMetadata().getReference().getDownloadUrl();
            Toast.makeText(UploadBook.this, "Upload successful", Toast.LENGTH_SHORT).show();
            dbreference.child("books").child(item).child(bookid[0]).child("pics").setValue(downloadUrl.toString());
        }
    })
    .addOnFailureListener(new OnFailureListener() {
         @Override
         public void onFailure(@NonNull Exception e) {

        }
     });
}

为此-

final StorageReference ref = mStorageRef.child(bookid[0]);
UploadTask uploadTask = ref.putFile(file);

Task<Uri> urlTask = uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
    @Override
    public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
        if (!task.isSuccessful()) {
            throw task.getException();
        }
        return ref.getDownloadUrl();

    }
    }).addOnCompleteListener(new OnCompleteListener<Uri>() {
        @Override
        public void onComplete(@NonNull Task<Uri> task) {
            if (task.isSuccessful()) {
                Uri downloadUri = task.getResult();
                dbreference.child("books").child(item).child(bookid[0]).child("pics").setValue(downloadUri.toString());
            } else {
                 // Handle failures
            }
       }
});