FirebaseRecyclerAdapter适用于API 21,但不适用于oreo或牛轧糖 [英] FirebaseRecyclerAdapter working for API 21 but not working with oreo or nougat
问题描述
public class AllUsersActivity extends AppCompatActivity {
private Toolbar mToolbar;
private RecyclerView mUserRecycler;
private DatabaseReference mAllUsersDatabase;
private DatabaseReference mUserRef;
private FirebaseAuth mAuth;
private FirebaseUser mCurrentUser;
FirebaseRecyclerAdapter<Users, AllUsersViewHolder> firebaseRecyclerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_all_users);
mToolbar = (Toolbar) findViewById(R.id.users_app_bar);
setSupportActionBar(mToolbar);
getSupportActionBar().setTitle("All Users");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mAuth = FirebaseAuth.getInstance();
mCurrentUser = mAuth.getCurrentUser();
mUserRef = FirebaseDatabase.getInstance().getReference().child("Users").child(mAuth.getCurrentUser().getUid());
mAllUsersDatabase = FirebaseDatabase.getInstance().getReference().child("Users");
mAllUsersDatabase.keepSynced(true);
Log.i(TAG, "Toolbar DOne");
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setStackFromEnd(true);
mUserRecycler = (RecyclerView) findViewById(R.id.allusers_recycler_view);
mUserRecycler.setHasFixedSize(true);
mUserRecycler.setLayoutManager(linearLayoutManager);
}
@Override
protected void onStart() {
super.onStart();
mUserRef.child("online").setValue("true");
FirebaseRecyclerOptions personsOptions = new FirebaseRecyclerOptions.Builder<Users>()
.setQuery(mAllUsersDatabase, Users.class).build();
Log.i(TAG, "onStart - ");
firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Users, AllUsersViewHolder>(personsOptions) {
@NonNull
@Override
public AllUsersViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.allusers_single, parent, false);
Log.i(TAG, "Create VIewHolder ");
return new AllUsersViewHolder(view);
}
@Override
protected void onBindViewHolder(@NonNull AllUsersViewHolder holder, int position,
@NonNull final Users model) {
Log.i(TAG, "onBindVIewHolder - " + model.getName());
holder.setDisplayName(model.getName());
holder.setUserImage(model.getThumb_image(), getApplicationContext());
final String user_id = getRef(position).getKey();
holder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent chat_intent = new Intent(AllUsersActivity.this, ChatActivity.class);
chat_intent.putExtra("user_id", user_id);
chat_intent.putExtra("user_name", model.getName());
startActivity(chat_intent);
}
});
}
};
mUserRecycler.setAdapter(firebaseRecyclerAdapter);
firebaseRecyclerAdapter.startListening();
}
@Override
public void onStop() {
super.onStop();
if (mCurrentUser != null) {
mUserRef.child("online").setValue(ServerValue.TIMESTAMP);
}
firebaseRecyclerAdapter.stopListening();
}
public static class AllUsersViewHolder extends RecyclerView.ViewHolder {
public View mView;
public AllUsersViewHolder(View itemView) {
super(itemView);
mView = itemView;
}
public void setDisplayName(String a) {
TextView userName = (TextView) mView.findViewById(R.id.allusers_name);
userName.setText(a);
}
public void setUserImage(String thumb_image, Context ct) {
CircleImageView userImageView = (CircleImageView) mView.findViewById(R.id.allusers_image);
Picasso.get().load(thumb_image).placeholder(R.drawable.user).into(userImageView);
}
}
问题是我正在从Firebase获取数据并在API 21中将其显示在屏幕上,即棒棒糖,但在使用oreo和牛轧糖的情况下,没有任何内容加载到屏幕上,并且我可以在日志中看到数据.代码有什么问题?请帮忙. 我正在从Firebase检索所有用户的列表,并使用Firebase UI数据库.使用Firebase 16.0.0 资源链接 https://github.com/firebase/FirebaseUI-Android/tree/master/数据库
The problem is I am getting the data from Firebase and its showing on screen in API 21 i.e. lollipop but with oreo and nougat nothing loads on to the screen and I can see the data in logs. What is wrong with the code? Please help. I am retrieving the list of all users from Firebase and using the Firebase UI database. Using Firebase 16.0.0 Resource Link https://github.com/firebase/FirebaseUI-Android/tree/master/database
推荐答案
这在android 7上有效,只是看看我们的代码之间的差异并更改参数
this works on android 7 just look the difference between our codes and change the parameters
private RecyclerView usersList;
private DatabaseReference usersDatabase;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getSupportActionBar().setTitle("Users List");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
usersDatabase = FirebaseDatabase.getInstance().getReference().child("locations");
usersList = findViewById(R.id.usersList);
usersList.setHasFixedSize(true);
usersList.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL));
usersList.setLayoutManager(new LinearLayoutManager(this));
}
@Override
protected void onStart() {
super.onStart();
FirebaseRecyclerAdapter<Users, UsersViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Users, UsersViewHolder>(
Users.class,
R.layout.user_list,
UsersViewHolder.class,
usersDatabase
) {
@Override
protected void populateViewHolder(final UsersViewHolder usersViewHolder, Users users, final int position) {
String str = getRef(position).getKey();
String newName = str.replace(" ", ".");
usersViewHolder.setDisplayName(newName);
final String user_id = getRef(position).getKey();
usersViewHolder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, UserActivity.class);
intent.putExtra("user_id", user_id);
startActivity(intent);
}
});
}
};
usersList.setAdapter(firebaseRecyclerAdapter);
}
@SuppressWarnings("WeakerAccess")
public static class UsersViewHolder extends RecyclerView.ViewHolder {
View mView;
public UsersViewHolder(View itemView) {
super(itemView);
mView = itemView;
}
public void setDisplayName(String name) {
TextView userNameView = mView.findViewById(R.id.userName);
userNameView.setText(name);
}
public void setDisplayStatus(String status) {
TextView statusView = mView.findViewById(R.id.userStatus);
if (status.equals("offline")) {
statusView.setText("offline");
statusView.setTextColor(Color.RED);
} else {
statusView.setText(status);
statusView.setTextColor(Color.GREEN);
}
}
}
这是activity_main.xml
and this is the activity_main.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.mike.mapfirebasedisplay.MainActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/usersList"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="5dp" />
这是您可以自由更改的用户列表.....!
and this is the user list that you are free to change it .....!
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:layout_marginEnd="16dp"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp">
<TextView
android:id="@+id/userName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="@string/name"
android:textColor="@android:color/black"
android:textSize="18sp" />
</RelativeLayout>
这篇关于FirebaseRecyclerAdapter适用于API 21,但不适用于oreo或牛轧糖的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!