2

I want to display random images uploaded by users in an activity and when they click on it then it would take them to the users page.


What i have done is uploaded these images in firebase storage and created their database.Then I stored these image urls in an arraylist, used Collections.shuffle() to randomize it and passed it to recycle view to display these images.I also tried to link these images with their details url in firebase database. I want to know what is the better way of doing this?

{
  "dj" : {
    "artist1" : {
      "image" : "https://firebasestorage.googleapis.com/v0/b",
      "name" : "artistone",
      "place" : "plac1",
      "price" : 1000
    },
    "artist2" : {
      "image" : "https://firebasestorage.googleapis.com/v0/b",
      "name" : "artisttwo",
      "place" : "place2",
      "price" : 20000
    }
  },
  "randomimages" : {
    "image1" : {
      "image" : "https://firebasestorage.googleapis.com/v0/b/",
      "vendorurl" : "https://xyz-.firebaseio.com/dj/artist1"
    },
    "image10" : {
      "image" : "https://firebasestorage.googleapis.com/v0/",
      "vendorurl" : "https://xyz-.firebaseio.com/dj/artist1"
    },
    "image2" : {
      "image" : "https://firebasestorage.googleapis.com/v0/b",
      "vendorurl" : "https://xyz-.firebaseio.com/dj/artist2"
    },
    "image3" : {
      "image" : "https://firebasestorage.googleapis.com/v0/b",
      "vendorurl" : "https://xyz-.firebaseio.com/dj/artist1"
    },
    "image4" : {
      "image" : "https://firebasestorage.googleapis.com/v0/b",
      "vendorurl" : "https://xyz-.firebaseio.com/dj/artist2"
    },
    "image5" : {
      "image" : "https://firebasestorage.googleapis.com/v0/b",
      "vendorurl" : "https://xyz-.firebaseio.com/dj/artist2"
    },
    "image6" : {
      "image" : "https://firebasestorage.googleapis.com/v0/b",
      "vendorurl" : "https://xyz-.firebaseio.com/dj/artist1"
    },
    "image7" : {
      "image" : "https://firebasestorage.googleapis.com/v0/b",
      "vendorurl" : "https://xyz-.firebaseio.com/dj/artist1"
    },
    "image8" : {
      "image" : "https://firebasestorage.googleapis.com/v0/b",
      "vendorurl" : "https://xyz-.firebaseio.com/dj/artist2"
    },
    "image9" : {
      "image" : "https://firebasestorage.googleapis.com/v0/b",
      "vendorurl" : "https://xyz-.firebaseio.com/dj/artist2"
    }
  }

My randomimage activity

  public class RandomImages extends AppCompatActivity {

    private static final String TAG = "RandomImages";
    private RecyclerView recyclerView;
    RandomImagesRecyclerViewAdapter adapter;
    private Intent randomimagesintent;
    private String RANDOMIMAGEVENDORURL="randomimagevendorurl";
    public ArrayList<Integer> index=new ArrayList<>();

    final static ArrayList<String> imagearray = new ArrayList<String>();
    final static ArrayList<String> vendorurlarray = new ArrayList<String>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_random_images);

        new RandomImagesAsyncTask().execute("");
    }

    private class RandomImagesAsyncTask extends AsyncTask<String, Void, Void> {

        @Override
        protected Void doInBackground(String... strings) {
            DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReferenceFromUrl("https://wedapp-86c5d.firebaseio.com/randomimages");
            databaseReference.addValueEventListener(new ValueEventListener() {

                public static final String TAG = "RandomImages";

                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    Log.e(TAG, "onDataChange: firebase started");
                    for (DataSnapshot imageSnapshot : dataSnapshot.getChildren()) {
                        RandomImagesRecyclerViewAdapter.Image image = imageSnapshot.getValue(RandomImagesRecyclerViewAdapter.Image.class);
                        imagearray.add(image.getImage());
                        vendorurlarray.add(image.getVendorurl());
                        Log.e(TAG, "onDataChange: exiting firebase on data change");
                    }
                    for(int x=0;x<imagearray.size();x++)
                        index.add(x);
                    addimages();

                }


                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
            return null;
        }
    }

    private void addimages() {
        Log.e(TAG, "addimages: starting adapter");
        recyclerView = (RecyclerView) findViewById(R.id.randomimages_recycleView);
        Collections.shuffle(index); // randomize the display of images
        Log.e(TAG, "addimages: "+imagearray );
        adapter = new RandomImagesRecyclerViewAdapter(this, RandomImagesRecyclerViewAdapter.getData(imagearray, index));
        recyclerView.setAdapter(adapter);
        StaggeredGridLayoutManager l = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
        //  l.setOrientation(GridLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(l);
         randomimagesintent = new Intent(RandomImages.this,ExpandedViewOfVendor.class);
        recyclerView.addOnItemTouchListener(new MainActivityRecyclerViewItemClickListener(RandomImages.this, new MainActivityRecyclerViewItemClickListener.OnItemClickListener() {

            @Override
            public void onItemClick(View view, int position) {
                Toast.makeText(RandomImages.this, " " + position, Toast.LENGTH_SHORT).show();
                randomimagesintent.putExtra(RANDOMIMAGEVENDORURL,vendorurlarray.get(index.get(position)));
                startActivity(randomimagesintent);
            }
        }));
    }
}

My randomimagesadapter

    public class RandomImagesRecyclerViewAdapter extends RecyclerView.Adapter<RandomImagesRecyclerViewAdapter.MyViewHolder> {


    private Context context;

    private ArrayList<Information> data;
    public static ArrayList<String> vendorimagemap = new ArrayList<String>();

    private LayoutInflater inflater;

    public static final String TAG = "RIRVA";

    static class Information {

        public String image;
    }

    static class Image {
        String image;
        String vendorurl;

        public Image() {
        }

        public Image(String image, String vendorurl) {
            this.image = image;
            this.vendorurl = vendorurl;
        }

        public String getImage() {
            return image;
        }

        public String getVendorurl() {
            return vendorurl;
        }

    }


    public static ArrayList<Information> getData(ArrayList<String> imagearray, ArrayList<Integer> index) {
        Log.e(TAG, "getData: entered function");

        ArrayList<Information> data = new ArrayList<>();


        for (int i = 0; i < imagearray.size(); i++) {

            Information current = new Information();
            current.image = imagearray.get(index.get(i));
            data.add(current);
        }
        Log.e(TAG, "getData: leaving function");
        return data;
    }


    public RandomImagesRecyclerViewAdapter(Context context, ArrayList<Information> data) {

        this.context = context;
        this.data = data;
        inflater = LayoutInflater.from(context);
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int position) {

        View view = inflater.inflate(R.layout.main_activity_recyclerview_cardview_singlerow, parent, false);

        MyViewHolder holder = new MyViewHolder(view);

        return holder;
    }

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

        Picasso.with(context).load(data.get(position).image).resize(612,612).into(myViewHolder.imageView);

    }

    @Override
    public int getItemCount() {

        return data.size();
    }

    class MyViewHolder extends RecyclerView.ViewHolder {
        ImageView imageView;

        public MyViewHolder(View itemView) {
            super(itemView);

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

        }
    }

}
ColdSpike
  • 196
  • 1
  • 17
  • See http://stackoverflow.com/q/38974771, http://stackoverflow.com/q/40853157, http://stackoverflow.com/q/40375718 or one of the others from this list: http://stackoverflow.com/search?q=%5Bfirebase-database%5D+random – Frank van Puffelen Jan 16 '17 at 16:23

1 Answers1

0

You can randomize your imageList using:

 Collections.shuffle(imageArray);
nullvoid
  • 121
  • 8
  • I did that....but i think there must be a better way to do all this...like retrieving from database and randomizing etc. Because this is very heavy processing. Now i have 10 images only what when i have 1000 images. – ColdSpike Jan 16 '17 at 13:09