回收器视图第一次不加载 ( Firebase )



第一次打开活动时,没有加载任何项目,但第二次通过navDrawer打开时,所有项目都会快速加载/显示:

http://natureprepping.bplaced.net/Error.mp4

我希望其他人能帮助我。

Main:

package com.example.lostplacemap;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ImageView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.navigation.NavigationView;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import java.util.ArrayList;
import java.util.List;
public class Main extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
DrawerLayout drawer;
NavigationView navigationView;
FirebaseAuth auth;
RecyclerView recyclerViewMain;
RecyclerView.Adapter adapter;
ProgressDialog progressDialog;
DatabaseReference databaseReference, followRef;
ImageView like;
List<ImageUploadInfo> list = new ArrayList<>();
List<String> followingList;
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
drawer = findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();
like = findViewById(R.id.ic_like);
navigationView = findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
auth = FirebaseAuth.getInstance();
recyclerViewMain = findViewById(R.id.recyclerView);
//recyclerViewMain.setHasFixedSize(true);
recyclerViewMain.setLayoutManager(new LinearLayoutManager(Main.this));
progressDialog = new ProgressDialog(Main.this);
progressDialog.setMessage("Lade Bilder...");
progressDialog.show();
followingList = new ArrayList<>();
adapter = new RecyclerViewAdapter(Main.this, list);
recyclerViewMain.setAdapter(adapter);
databaseReference = FirebaseDatabase.getInstance().getReference("All_Image_Uploads_Database");
followRef = FirebaseDatabase.getInstance().getReference("Follow").child(FirebaseAuth.getInstance().getCurrentUser().getUid()).child("following");
//Query SortPosts = databaseReference.orderByChild("counter");

final FirebaseUser user = auth.getCurrentUser();
followRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
followingList.clear();
followingList.add(user.getUid());
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
followingList.add(snapshot.getKey());
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});

databaseReference.orderByChild("counter").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot postSnapshot : snapshot.getChildren()) {
final ImageUploadInfo imageUploadInfo = postSnapshot.getValue(ImageUploadInfo.class);
for (String id : followingList) {
if (imageUploadInfo.getPublisher().equals(id)) {
list.add(imageUploadInfo);
}
}
adapter.notifyDataSetChanged();
}
progressDialog.dismiss();
}
@Override
public void onCancelled(DatabaseError databaseError) {
Toast.makeText(Main.this, "Fehler!", Toast.LENGTH_SHORT).show();
progressDialog.dismiss();
}
});
}

@Override
public void onBackPressed() {
DrawerLayout drawer = findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
//here is the main place where we need to work on.
int id = item.getItemId();
switch (id) {
case R.id.nav_home:
Intent h = new Intent(Main.this, Main.class);
startActivity(h);
break;

case R.id.nav_logout:
FirebaseAuth.getInstance().signOut();
Intent f = new Intent(Main.this, Login.class);
startActivity(f);
break;
case R.id.nav_profil:
Intent e = new Intent(Main.this, Profil.class);
startActivity(e);
break;
case R.id.nav_new:
Intent d = new Intent(Main.this, New_Marker.class);
startActivity(d);
break;
case R.id.nav_new_post:
Intent c = new Intent(Main.this, NewPost.class);
startActivity(c);
break;
case R.id.nav_follow:
Intent b = new Intent(Main.this, FollowActivity.class);
startActivity(b);
break;
case R.id.nav_karten_auswahl:
Intent a = new Intent(Main.this, KartenAuswahl.class);
startActivity(a);
break;
case R.id.nav_settings:
Intent aa = new Intent(Main.this, SettingsActivity.class);
startActivity(aa);
break;
case R.id.nav_chat:
Intent ab = new Intent(Main.this, ChatActivity.class);
startActivity(ab);
break;
}

DrawerLayout drawer = findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}

}

适配器:

package com.example.lostplacemap;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.view.LayoutInflater;
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.bumptech.glide.Glide;
import com.example.lostplacemap.Model.User;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import java.util.List;

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {
private FirebaseAuth fAuth = FirebaseAuth.getInstance();
private DatabaseReference databaseReference2;
private Context context;
private List<ImageUploadInfo> MainImageUploadInfoList;
RecyclerViewAdapter(Context context, List<ImageUploadInfo> TempList) {
this.MainImageUploadInfoList = TempList;
this.context = context;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_items, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
final ImageUploadInfo UploadInfo = MainImageUploadInfoList.get(position);
holder.imageNameTextView.setText(UploadInfo.getImageName());
holder.publisher.setText(UploadInfo.getPublisherName());
Glide.with(context).load(UploadInfo.getImageURL()).into(holder.imageView);
final FirebaseUser user = fAuth.getCurrentUser();
databaseReference2.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
User user = dataSnapshot.child(UploadInfo.publisher).getValue(User.class);
Glide.with(context)
.load(user.getImageurl())
.into(holder.image_profile);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
holder.publisher.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openUser(UploadInfo);
}
});

holder.image_profile.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openUser(UploadInfo);
}
});

isLiked(UploadInfo.getPostid(), holder.like);
nrLikes(holder.AnzahlLikes, UploadInfo.getPostid());
holder.like.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (holder.like.getTag().equals("like")) {
FirebaseDatabase.getInstance().getReference().child("Likes").child(UploadInfo.getPostid()).child(user.getUid()).setValue(true);
} else {
FirebaseDatabase.getInstance().getReference().child("Likes").child(UploadInfo.getPostid()).child(user.getUid()).removeValue();
}
}
});
}
@Override
public int getItemCount() {
return MainImageUploadInfoList.size();
}
private void isLiked(String postid, final ImageView imageView) {
final FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("Likes").child(postid);
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
assert firebaseUser != null;
if (dataSnapshot.child(firebaseUser.getUid()).exists()) {
imageView.setImageResource(R.drawable.ic_liked);
imageView.setTag("liked");
} else {
imageView.setImageResource(R.drawable.ic_like);
imageView.setTag("like");
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});

}
private void nrLikes(final TextView likes, String postid) {
DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("Likes").child(postid);
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
likes.setText(String.valueOf(dataSnapshot.getChildrenCount()));
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
private void openUser(ImageUploadInfo uploadInfo) {
SharedPreferences userS = context.getSharedPreferences("selectedUser",
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = userS.edit();
editor.putString("user", uploadInfo.publisher);
editor.apply();
Intent i1 = new Intent(context, UniversalProfil.class);
context.startActivity(i1);
}
class ViewHolder extends RecyclerView.ViewHolder {
ImageView imageView;
TextView imageNameTextView;
ImageView like;
TextView AnzahlLikes;
TextView publisher;
ImageView image_profile;

ViewHolder(View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.imageView);
like = itemView.findViewById(R.id.ic_like);
imageNameTextView = itemView.findViewById(R.id.ImageNameTextView);
AnzahlLikes = itemView.findViewById(R.id.likeCount);
publisher = itemView.findViewById(R.id.TextUsername);
image_profile = itemView.findViewById(R.id.image_profile);
databaseReference2 = FirebaseDatabase.getInstance().getReference("Users");
}
}
}

我试图修复它,但失败了,因为错误也不总是发生。

尝试将所有这些代码放入

databaseReference.orderByChild("counter").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot postSnapshot : snapshot.getChildren()) {
final ImageUploadInfo imageUploadInfo = postSnapshot.getValue(ImageUploadInfo.class);
for (String id : followingList) {
if (imageUploadInfo.getPublisher().equals(id)) {
list.add(imageUploadInfo);
}
}
adapter.notifyDataSetChanged();
}
progressDialog.dismiss();
}
@Override
public void onCancelled(DatabaseError databaseError) {
Toast.makeText(Main.this, "Fehler!", Toast.LENGTH_SHORT).show();
progressDialog.dismiss();
}
});

直接在此for循环下,在第一个查询中:

........
......... 
followRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
followingList.clear();
followingList.add(user.getUid());
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
followingList.add(snapshot.getKey());
}
//here paste the code
...........
............

最新更新