简体   繁体   中英

Show the image stored in Firebase storage in Imageview from Firebase Database

I'm trying to show the image which has been sucessfully uploaded in firebase storage and whose unique id is also updated in Firebase Database under "pics" in my Imageview but I did tried multiple time but am unable to show the image or retrive images .

Below is my Firebase Database Structure. 在此处输入图片说明

and my Imageview is 在此处输入图片说明

Where image should be displayed in place of Bookshelf which is default pic but unable to do so. Below is my upload Activity

 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"))); } } 

and my Adapter class is

 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(); } } 

Please help.

Here is my whole project https://github.com/BlueYeti1881/Pustak

Thanks in advance.

In UploadBook class change this

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) {

        }
     });
}

To This-

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
            }
       }
});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM