Показать изображение, хранящееся в хранилище Firebase в Imageview из базы данных Firebase - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь показать изображение, которое было успешно загружено в хранилище Firebase и чей уникальный идентификатор также обновлен в базе данных Firebase в разделе «картинки» в моем ImageView, но я пробовал несколько раз, но не могу показать изображение или получить изображения.

Ниже моя структура базы данных Firebase. enter image description here

и мой просмотр изображений 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 голосов
/ 31 августа 2018

В классе 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
            }
       }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...