2017-01-16 58 views
1

我想顯示用戶在活動中上傳的隨機圖片,當他們點擊它時,它會將它們帶到用戶頁面。如何從Firebase數據庫生成隨機圖片?


我所做的被上傳在火力存儲這些圖像和創建其database.Then我存儲這些圖像網址一個ArrayList,使用Collections.shuffle()來隨機它,並將它傳遞到回收視圖以顯示這些圖片。我也嘗試將這些圖片與他們在firebase數據庫中的詳細信息鏈接起來。我想知道這樣做的更好方法是什麼?

{ 
    "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" 
    } 
    } 

我randomimage活動

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

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

     } 
    } 

} 
+0

請參閱http://stackoverflow.com/q/38974771,http://stackoverflow.com/q/40853157,http://stackoverflow.com/q/40375718或此列表中的其他人之一:http ://stackoverflow.com/search?q =%5Bfirebase-database%5D +隨機 –

回答

0

可以使用隨機的圖像列表:

Collections.shuffle(imageArray); 
+0

我做到了這一點....但我認爲必須有更好的方式來做到這一切...就像從數據庫中檢索和隨機化等因爲這是非常重的處理。現在我只有10張圖片,當我有1000張圖片時。 –