【发布时间】:2020-02-17 18:18:43
【问题描述】:
我正在创建一个应用程序,我将数据存储到 firebase 并将其检索到我的 recycler 视图,但问题是,我想在 recycler 视图的顶部显示最新添加的数据。我正在尝试获取最新数据,但我已经完成了所有可能的解决方案,但我仍然没有得到。
请看下面的代码......
这是我的主类:
public class ShowDetails extends AppCompatActivity {
ProgressDialog progressDialog;
List<DataClass> list = new ArrayList<>();
RecyclerView recyclerView;
RecyclerView.Adapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show_details);
recyclerView = findViewById(R.id.erecyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(ShowDetails.this));
progressDialog = new ProgressDialog(ShowDetails.this);
progressDialog.setMessage("Loading Data from Firebase Database");
progressDialog.show();
FirebaseOptions options = new FirebaseOptions.Builder()
.setApplicationId("1:102738125513:android:3042292623f0448c") // Required for Analytics.
.setApiKey("AIzaSyAZbWBpPzjAkrg23riK9kwk2T0tDf47dko") // Required for Auth.
.setDatabaseUrl("https://citycare-fed31.firebaseio.com/") // Required for RTDB.
.build();
FirebaseApp.initializeApp(this);
// Retrieve my other app.
FirebaseApp app = FirebaseApp.getInstance("[DEFAULT]");
// Get the database for the other app.
FirebaseDatabase secondaryDatabase = FirebaseDatabase.getInstance(app);
DatabaseReference data = secondaryDatabase.getInstance().getReference("Electricity");
data.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot ds : dataSnapshot.getChildren()) {
for (DataSnapshot dSnapshot : ds.getChildren()) {
DataClass DataClass = dSnapshot.getValue(DataClass.class);
Log.d("Show", DataClass.getEname() == null ? "" : DataClass.getEname());
list.add(DataClass);
}
adapter = new ShowDetails.DataAdapter(ShowDetails.this, list);
recyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
progressDialog.dismiss();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
progressDialog.dismiss();
}
});
}
这是我的适配器类:
private class DataAdapter extends RecyclerView.Adapter<ShowDetails.DataAdapter.ViewHolder> {
Context context;
List<DataClass> listData;
public DataAdapter(Context context, List<DataClass> list) {
this.context = context;
this.listData = list;
}
@Override
public ShowDetails.DataAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.show_items, parent, false);
ShowDetails.DataAdapter.ViewHolder viewHolder = new ShowDetails.DataAdapter.ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(ShowDetails.DataAdapter.ViewHolder holder, int position) {
final DataClass AllDetails = listData.get(position);
holder.NameTextView.setText(AllDetails.getEname());
holder.EmailTextView.setText(AllDetails.getEemail());
holder.DateTextView.setText(AllDetails.getEdate());
holder.LocationTextView.setText(AllDetails.getElocation());
holder.TypeTextView.setText(AllDetails.getEtype());
Picasso.with(context).load(AllDetails.getImgurl()).resize(120, 60).into(holder.ImageTextView);
holder.ImageTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(ShowDetails.this, ShowImage.class);
i.putExtra("img", AllDetails.getImgurl());
startActivity(i);
}
});
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(ShowDetails.this, Email_Activity.class);
i.putExtra("txt", AllDetails.getEemail());
startActivity(i);
}
});
}
@Override
public int getItemCount() {
return listData.size();
}
class ViewHolder extends RecyclerView.ViewHolder {
public TextView NameTextView;
public TextView EmailTextView;
public TextView DateTextView;
public TextView LocationTextView;
public TextView TypeTextView;
public ImageView ImageTextView;
public ViewHolder(View itemView) {
super(itemView);
NameTextView = itemView.findViewById(R.id.ShowNameTextView);
EmailTextView = itemView.findViewById(R.id.ShowEmailTextView);
DateTextView = itemView.findViewById(R.id.ShowDateTextView);
LocationTextView = itemView.findViewById(R.id.ShowLocationTextView);
TypeTextView = itemView.findViewById(R.id.ShowTypeTextView);
ImageTextView = itemView.findViewById(R.id.ShowImageView);
}
}
}
这是我的数据库
这是我删除额外 for 循环后的 API 响应 API response
请帮帮我,我是编程新手
【问题讨论】:
-
请发布数据库结构
-
请分享您必须从数据库中检索的 API 响应。所以我们可以提供更好的帮助。
标签: android firebase firebase-realtime-database android-recyclerview