Я пытаюсь получить подписчиков пользователей из Firebase и поместить их на RecyclerView
, чтобы любой мог видеть, как в Twitter и Instagram, когда я запускаю приложение, оно возвращает ошибку.
Мой код:
открытый класс ViewFollowersFragment расширяет фрагмент { частный статический финал String TAG = "ViewFollowersFragment";
private CircleImageView myprofileimage;
private TextView username;
private ImageView arrow;
private ListView vfollowerslistview;
private DatabaseReference viewFollowersref,viewUserRef;
private FirebaseAuth mAuth;
private FirebaseListAdapter viewfollowersadapter;
private List<User> mUserList;
private User mUser;
String userid;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_view_followers, container, false);
Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar);
vfollowerslistview = (ListView) view.findViewById(R.id.viewfollowerslistview);
arrow = (ImageView) view.findViewById(R.id.fragfollowersbackarrow);
arrow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getActivity().getSupportFragmentManager().popBackStack();
getActivity().finish();
}
});
mUserList = new ArrayList<>();
mAuth = FirebaseAuth.getInstance();
userid = mAuth.getUid();
viewFollowersref = FirebaseDatabase.getInstance().getReference().child("User_Account_Settings");
viewUserRef = FirebaseDatabase.getInstance().getReference();
setFollowers();
return view;
}
private void setFollowers () {
Query query = FirebaseDatabase.getInstance().getReference()
.child("Followers")
.child(mUser.getUser_id());
FirebaseListOptions<UserAccountSettings> options = new FirebaseListOptions.Builder<UserAccountSettings>()
.setLayout(R.layout.layout_user_listitem)
.setLifecycleOwner(getActivity())
.setQuery(query,UserAccountSettings.class)
.build();
viewfollowersadapter = new FirebaseListAdapter(options) {
@Override
protected void populateView(View v, Object model, final int position) {
String newfol = getRef(position).getKey();
final TextView username = v.findViewById(R.id.username);
final CircleImageView profile_image = v.findViewById(R.id.profile_image);
viewFollowersref.child(newfol).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
if (dataSnapshot.hasChild("username")) {
String myusername = dataSnapshot.child("username").getValue().toString();
username.setText(myusername);
}
if (dataSnapshot.hasChild("profileimage")) {
String myimage = dataSnapshot.child("profileimage").getValue().toString();
if (myimage.isEmpty()) {
profile_image.setImageResource(R.drawable.pro_pic);
} else {
Picasso.with(getActivity()).load(myimage).placeholder(R.drawable.pro_pic).into(profile_image);
}
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
username.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent profileIntent = new Intent(getActivity(), ProfileActivity.class);
profileIntent.putExtra("calling_activity", "Search_Activity");
profileIntent.putExtra("intent_user", mUserList.get(position));
startActivity(profileIntent);
}
});
profile_image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent profileIntent = new Intent(getActivity(), ProfileActivity.class);
profileIntent.putExtra("calling_activity", "Search_Activity");
profileIntent.putExtra("intent_user", mUserList.get(position));
startActivity(profileIntent);
}
});
Query userQuery = viewUserRef
.child("Users")
.orderByChild("user_id");
userQuery.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot singleSnapshot : dataSnapshot.getChildren()) {
Log.d(TAG, "onDataChange: found user: " +
singleSnapshot.getValue(User.class).getUsername());
mUserList.add(singleSnapshot.getValue(User.class));
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
};
vfollowerslistview.setAdapter(viewfollowersadapter);
}
}
Кажется, я не могу вписать код entirw.
Вот ошибка, которая возвращается. ссылка на com.example.hope.myapplication.Utils.ViewFollowersFragment.s etFollowers (ViewFoll owersFragment.java:1 00) в com.example.hope.myapplication.Utils.ViewFollowersFragment.o nCreateView (ViewFoll owersFragment. : 8 9)
Согласно вашему комментарию, вы получаете следующую ошибку:
Caused by: java.langCaused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.example.hope.myapplication.Models.User.getUser_id()' on a null object reference
Поскольку ваш объект mUser
, для которого вы вызываете метод getUser_id()
, имеет значение null
. Это происходит потому, что вы вообще не инициализировали объект User
в своем коде. Чтобы решить эту проблему, измените следующую строку кода:
Query query = FirebaseDatabase.getInstance().getReference()
.child("Followers")
.child(mUser.getUser_id());
к
Query query = FirebaseDatabase.getInstance().getReference()
.child("Followers")
.child(mAuth.getCurrentUser().getUid());
В котором mAuth.getCurrentUser()
возвращает объект FirebaseUser
, поэтому вы можете получить правильный uid
.
Код, который вы мне дали, отображает текущих подписчиков пользователей. Я хочу отображать подписчиков пользователя. Я хочу отображать подписчиков конкретного пользователя.
Верно. В этом случае вы должны использовать вместо mAuth.getCurrentUser().getUid()
uid пользователя, которого хотите отобразить, верно?
Я думаю, что, упомянув «конкретный», я сбил с толку. я хотел сказать, что это любой пользователь. Чтобы иметь возможность видеть подписчиков любого пользователя
Да, вместо mAuth.getCurrentUser().getUid()
, который является идентификатором текущего вошедшего в систему пользователя, вы должны использовать любой другой uid любого пользователя. Чтобы получить этот uid, сохраните этот uid под каждым пользовательским объектом, чтобы иметь возможность его использовать, верно?
Я объяснил в одном из моих учебные пособия, как вы можете этого добиться.
Все в порядке, проблема решена?
Извините, у меня не было возможности попробовать. Сначала я попробую учебные пособия, а затем дам вам отзыв. Спасибо за терпеливость.
Привет, Алекс, у меня ужасно не получается. Я пробовал код .child (Followers) .equalTo (Dy7186gzhnnwyy17); . Dy71 ... является пользовательским идентификатором любого пользователя. Он просто отображал всех пользователей.
Dy7186gzhnnwyy17 не может быть идентификатором какого-либо пользователя, не подстановочный знак - это идентификатор отдельного пользователя. Вы должны сначала получить желаемый идентификатор, а затем использовать его в своей ссылке, верно?
Это должен быть uid желаемого пользователя? Позволь мне попробовать это
Приятно слышать, что это сработало :) В этом случае, пожалуйста, подумайте о том, чтобы принять мой ответ, щелкнув галочку (✔️) слева под стрелками голосования. Должен поменять цвет на зеленый. Я бы оценил это. Спасибо!
Привет, Алекс, извини за беспокойство, я просто хочу спросить, можно ли передать Parcelable Arraylist, установив onclicklistener в текстовом представлении?
Чтобы следовать правилам этого сообщества, задайте еще один свежий вопрос, чтобы я и другие пользователи могли вам помочь.
Только что разместил вопрос.
Я посмотрю и, если знаю ответ, напишу вам.
Если приложение вылетает, есть трассировка стека. Посмотрите это в logcat и добавьте к своему вопросу.