我想顯示用戶在活動中上傳的隨機圖片,當他們點擊它時,它會將它們帶到用戶頁面。如何從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);
}
}
}
請參閱http://stackoverflow.com/q/38974771,http://stackoverflow.com/q/40853157,http://stackoverflow.com/q/40375718或此列表中的其他人之一:http ://stackoverflow.com/search?q =%5Bfirebase-database%5D +隨機 –