Я хочу отобразить новейшее изображение, загруженное в хранилище Firebase в начале программы повторной проверки - PullRequest
0 голосов
/ 14 октября 2019

Я загружаю изображение в хранилище Firebase, а затем помещаю имя и URL этого изображения в базу данных. Затем я получаю URL-адрес изображения, чтобы отобразить его в своем обзоре. Теперь я хочу отобразить новейшее изображение, загруженное в хранилище Firebase, при запуске программы повторного просмотра. Как я могу изменить порядок в моей базе данных Firebase?

Прямо сейчас, первое добавленное вами изображение - это первое изображение в базе данных. Я хочу, чтобы последнее изображение, которое пользователь загружал, URL-адрес этого изображения должен быть в верхней части базы данных Firebase.

Каждое изображение

Name: tom
Desc: 1
Url: any

Name: miki
Desc: 2
Url: any

Описание: 1 самый старый

Описание: 2 самое новое

Как изменить порядок, пожалуйста, дайте мне полный код

WallpapersActivity

public class WallpapersActivity extends AppCompatActivity {

List<Wallpaper> wallpaperList;
List<Wallpaper> favList;
RecyclerView recyclerView;
WallpapersAdapter adapter;

DatabaseReference dbWallpapers, dbFavs;
ProgressBar progressBar;


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


    Intent intent = getIntent();
    final String category = intent.getStringExtra("category");

    Toolbar toolbar = findViewById(R.id.toolbar);
    toolbar.setTitle(category);
    setSupportActionBar(toolbar);

    favList = new ArrayList<>();
    wallpaperList = new ArrayList<>();
    recyclerView = findViewById(R.id.recycler_view);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    adapter = new WallpapersAdapter(this, wallpaperList);

    recyclerView.setAdapter(adapter);

    progressBar = findViewById(R.id.progressbar);



    dbWallpapers = FirebaseDatabase.getInstance().getReference("images")
            .child(category);



    if(FirebaseAuth.getInstance().getCurrentUser() != null){
        dbFavs = FirebaseDatabase.getInstance().getReference("users")
                .child( FirebaseAuth.getInstance().getCurrentUser().getUid() )
                .child( "favourites" )
                .child( category );

        fetchFavWallpapers( category );
    }else {
        fetchWallpapers( category );
    }
}

WallpapersAdapter

public class WallpapersAdapter extends RecyclerView.Adapter<WallpapersAdapter.WallpaperViewHolder> {

private Context mCtx;
private List<Wallpaper> wallpaperList;
DatabaseReference dbWallpapers;


public WallpapersAdapter(Context mCtx, List<Wallpaper> wallpaperList) {
    this.mCtx = mCtx;
    this.wallpaperList = wallpaperList;


}

@Override
public WallpaperViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(mCtx).inflate( R.layout.recyclerview_wallpapers, parent, false);
    return new WallpaperViewHolder(view);

}

@Override
public void onBindViewHolder(WallpaperViewHolder holder, int position) {
    Wallpaper w = wallpaperList.get(position);
    holder.textView.setText(w.title);
    Glide.with(mCtx)
            .load(w.url)
            .into(holder.imageView);

    if (w.isFavourite) {
        holder.checkBoxFav.setChecked(true);
    }
}

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


class WallpaperViewHolder extends RecyclerView.ViewHolder
        implements View.OnClickListener, CompoundButton.OnCheckedChangeListener {

    TextView textView;
    ImageView imageView;
}

CategoriesAdapter

public class CategoriesAdapter extends RecyclerView.Adapter<CategoriesAdapter.CategoryViewHolder> {

private Context mCtx;
private List<Category> categoryList;

public CategoriesAdapter(Context mCtx, List<Category> categoryList) {
    this.mCtx = mCtx;
    this.categoryList = categoryList;
}

@Override
public CategoryViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(mCtx).inflate(R.layout.recyclerview_categories, parent, false);
    return new CategoryViewHolder(view);
}

@Override
public void onBindViewHolder(CategoryViewHolder holder, int position) {
    Category c = categoryList.get(position);
    holder.textView.setText(c.name);
    Glide.with(mCtx)
            .load(c.thumb)
            .into(holder.imageView);
}

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

class CategoryViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    TextView textView;
    ImageView imageView;

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

        textView = itemView.findViewById(R.id.text_view_cat_name);
        imageView = itemView.findViewById(R.id.image_view);

        itemView.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        int p = getAdapterPosition();
        Category c = categoryList.get(p);

        Intent intent = new Intent(mCtx, WallpapersActivity.class);
        intent.putExtra("category", c.name);

        mCtx.startActivity(intent);
    }
}

Firebase Database

Приложения RecyclerView

Ответы [ 2 ]

2 голосов
/ 14 октября 2019

Добавьте эту строку перед установкой адаптера в обои. Активность:

                Collections.reverse( wallpaperList);
0 голосов
/ 14 октября 2019

Вы можете использовать временную метку при получении дочерних значений и отображать ее в верхней части с самой последней временной меткой

ref.child("myData").orderByChild("timestamp").limitToLast(10)

Тогда в ваших правилах безопасности и безопасности есть что-то вроде:

"myData": {
        ".indexOn": "timestamp"
      }

Для повышения производительности

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...