0

many suggestions tried but taskSnapshot.getStorage().getDownloadUrl().toString() this is not working. in the firebase the another url is stored despite the download url. the whole 2 related java files are given below. if any suggestions you have please tell me about that.

PostAddFragment.java

package com.example.login.ui.login;

import android.content.ContentResolver;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.MimeTypeMap;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

import com.example.login.R;
import com.example.login.Upload;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.OnProgressListener;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.StorageTask;
import com.google.firebase.storage.UploadTask;

import static android.app.Activity.RESULT_OK;

public class PostAddFragment extends Fragment {

    private Button btnChoose, btnUpload;
    private ImageView imageView;
    private ProgressBar progressBar;
    private EditText product_name, product_category, product_quantity, product_price, product_location;
    private static final int PICK_IMAGE_REQUEST = 1;
    private Uri Filepath;
    private StorageReference storageReference;
    private DatabaseReference databaseReference;
    private StorageTask UploadTask;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View v= inflater.inflate(R.layout.fragment_post_add, container, false);
        btnChoose = v.findViewById(R.id.btnChoose);
        btnUpload = v.findViewById(R.id.btnUpload);
        imageView = v.findViewById(R.id.galleryimage);
        progressBar = v.findViewById(R.id.progress_bar);
        product_name = v.findViewById(R.id.Product_name);
        product_category = v.findViewById(R.id.Category);
        product_quantity = v.findViewById(R.id.Quantity);
        product_price = v.findViewById(R.id.Price);
        product_location = v.findViewById(R.id.Location);
        progressBar.setVisibility(View.GONE);

        storageReference = FirebaseStorage.getInstance().getReference("uploads");
        databaseReference = FirebaseDatabase.getInstance().getReference("uploads");

        btnChoose.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ChooseImage();
            }
        });

        btnUpload.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (UploadTask != null && UploadTask.isInProgress()){
                    Toast.makeText(getActivity(),"Upload in Progress",Toast.LENGTH_SHORT).show();
                }
                else {
                    UploadImage();
                }
            }
        });
        return v;
    }

    private void ChooseImage() {
        Intent i = new Intent();
        i.setType("image/*");
        i.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(i,PICK_IMAGE_REQUEST);
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null){
            Filepath = data.getData();
            imageView.setImageURI(Filepath);
        }
    }

    private String getFileExtension(Uri uri){
        ContentResolver cr = getActivity().getContentResolver();
        MimeTypeMap mime = MimeTypeMap.getSingleton();
        return mime.getExtensionFromMimeType(cr.getType(uri));
    }

    private void UploadImage() {
        if(Filepath != null){
            final StorageReference storageReference1 = storageReference.child(System.currentTimeMillis()+"."+getFileExtension(Filepath));
            progressBar.setVisibility(View.VISIBLE);
            UploadTask = storageReference1.putFile(Filepath)
                    .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                            Handler handler = new Handler();
                            handler.postDelayed(new Runnable() {
                                @Override
                                public void run() {
                                    progressBar.setProgress(0);
                                }
                            },5000);
                            Toast.makeText(getActivity(),"Upload Successfull... See your add in My Adds Tab.",Toast.LENGTH_LONG).show();
                            Upload upload = new Upload(product_name.getText().toString().trim(), taskSnapshot.getStorage().getDownloadUrl().toString(),
                                    product_category.getText().toString(), product_quantity.getText().toString(),
                                    product_price.getText().toString(), product_location.getText().toString());
                            String uploadID = databaseReference.push().getKey();
                            databaseReference.child(uploadID).setValue(upload);
                            progressBar.setVisibility(View.GONE);
                        }
                    })
                    .addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            Toast.makeText(getActivity(),"failed to upload",Toast.LENGTH_SHORT).show();
                            progressBar.setVisibility(View.GONE);
                        }
                    })
                    .addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onProgress(@NonNull UploadTask.TaskSnapshot taskSnapshot) {
                            double progress = (100.0 * taskSnapshot.getBytesTransferred()/taskSnapshot.getTotalByteCount());
                            progressBar.setProgress((int) progress);
                        }
                    });
        }
        else{
            Toast.makeText(getActivity(),"no image has been selected",Toast.LENGTH_SHORT).show();

        }
    }
}

ImageAdapter.java

package com.example.login;

import android.content.Context;
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

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

import com.squareup.picasso.Picasso;

import java.util.List;

public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.ImageViewHolder> {

    private Context Context;
    private List<Upload> Uploads;
    private OnItemClickListener Listener;


    public ImageAdapter (Context context, List<Upload> uploads1){
        Context = context;
        Uploads = uploads1;
    }
    @NonNull
    @Override
    public ImageViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
        View v= LayoutInflater.from(Context).inflate(R.layout.image_item, parent, false);
        return new ImageViewHolder(v);
    }

    @Override
    public void onBindViewHolder(@NonNull ImageViewHolder holder,int position) {
        Upload uploadCurrent= Uploads.get(position);
        holder.textViewName.setText(uploadCurrent.getName());
        Picasso.with(Context)
                .load(uploadCurrent.getImageUrl())
                .placeholder(R.drawable.logo)
                .fit()
                .centerInside()
                .into(holder.imageView);
    }

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

    public class ImageViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener,
            View.OnCreateContextMenuListener, MenuItem.OnMenuItemClickListener {

        public TextView textViewName;
        public ImageView imageView;

        public ImageViewHolder(@NonNull View itemView) {
            super(itemView);
            textViewName = itemView.findViewById(R.id.text_product_name);
            imageView = itemView.findViewById(R.id.product_image);

            itemView.setOnClickListener(this);
            itemView.setOnCreateContextMenuListener(this);
        }

        @Override
        public void onClick(View v) {
            if(Listener != null){
                int position = getAdapterPosition();
                if (position != RecyclerView.NO_POSITION) {
                    Listener.OnItemClick(position);
                }
            }
        }

        @Override
        public void onCreateContextMenu(ContextMenu menu,View v,ContextMenu.ContextMenuInfo menuInfo) {
            menu.setHeaderTitle("Select Action");
            MenuItem details = menu.add(Menu.NONE ,1,1,"Details");
            MenuItem delete = menu.add(Menu.NONE ,2,2,"Delete");

            details.setOnMenuItemClickListener(this);
            delete.setOnMenuItemClickListener(this);
        }

        @Override
        public boolean onMenuItemClick(MenuItem item) {
            if(Listener != null){
                int position = getAdapterPosition();
                if (position != RecyclerView.NO_POSITION) {
                    switch(item.getItemId()){
                        case 1:
                            Listener.OnDetailsClick(position);
                            return true;

                        case 2:
                            Listener.OnDeleteClick(position);
                            return true;
                    }
                }
            }
            return false;
        }
    }

    public interface OnItemClickListener{
        void OnItemClick(int Position);

        void OnDetailsClick(int Position);

        void OnDeleteClick(int Position);
    }
    public void SetOnClickItemListener(OnItemClickListener listener){
        Listener = listener;
    }
}

I hope you have a better solution for this.

Doug Stevenson
  • 297,357
  • 32
  • 422
  • 441
Pratik PSB
  • 177
  • 1
  • 18
  • [this is the solution of my question which i have used & i got positive response](https://stackoverflow.com/a/54696675/12640900) – Pratik PSB Feb 05 '20 at 06:32

1 Answers1

0

Firebase Storage API version 16.0.1, the getDownloadUrl() method using taskSnapshot object has changed.,

Use this:

taskSnapshot.getMetadata().getReference().getDownloadUrl().toString()

to get download url from the firebase storage.

Kalpesh Rupani
  • 991
  • 4
  • 12