Ниже приведен код:
package com.example.convo;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.auth.FirebaseAuth;
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.ServerValue;
import com.google.firebase.database.ValueEventListener;
import com.squareup.picasso.Callback;
import com.squareup.picasso.NetworkPolicy;
import com.squareup.picasso.Picasso;
import de.hdodenhof.circleimageview.CircleImageView;
public class FriendsFragment extends Fragment {
private RecyclerView myFriensList;
private DatabaseReference FriendsReference;
private DatabaseReference UsersReference;
private FirebaseAuth mAuth;
String online_user_id;
private View myMainView;
public FriendsFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
myMainView = inflater.inflate(R.layout.fragment_friends, container, false);
myFriensList = myMainView.findViewById(R.id.friends_list);
mAuth = FirebaseAuth.getInstance();
online_user_id = mAuth.getCurrentUser().getUid();
FriendsReference = FirebaseDatabase.getInstance().getReference().child("Friends").child(online_user_id);
FriendsReference.keepSynced(true);
UsersReference = FirebaseDatabase.getInstance().getReference().child("Users");
UsersReference.keepSynced(true);
myFriensList.setLayoutManager(new LinearLayoutManager(getContext()));
// Inflate the layout for this fragment
return myMainView;
}
@Override
public void onStart() {
super.onStart();
FirebaseRecyclerAdapter<Friends, FriendsViewHolder> firebaseRecyclerAdapter
= new FirebaseRecyclerAdapter<Friends, FriendsViewHolder>
(
Friends.class,
R.layout.all_users_display_layout,
FriendsViewHolder.class,
FriendsReference
) {
@Override
protected void populateViewHolder(final FriendsViewHolder viewHolder, Friends model,final int position) {
viewHolder.setDate(model.getDate());
final String list_user_id = getRef(position).getKey();
/*
viewHolder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view)
{
String visit_user_id = getRef(position).getKey();
Intent profileIntent = new Intent(AllUsersActivity.this, ProfileActivity.class);
profileIntent.putExtra("visit_user_id", visit_user_id);
startActivity(profileIntent);
}
});
*/
UsersReference.child(list_user_id).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(final DataSnapshot dataSnapshot) {
final String userName = dataSnapshot.child("user_name").getValue().toString();
String thumbImage = dataSnapshot.child("user_thumb_image").getValue().toString();
if(dataSnapshot.hasChild("online")){
String online_status = (String) dataSnapshot.child("online").getValue().toString();
viewHolder.setUserOnline(online_status);
}
viewHolder.setUserName(userName);
viewHolder.setThumbImage(thumbImage, getContext());
viewHolder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CharSequence options[] = new CharSequence[]
{
userName + "'s Profile",
"Send Message"
};
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder.setTitle("Select Options");
builder.setItems(options, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int position) {
if(position == 0){
Intent profileIntent = new Intent(getContext(), ProfileActivity.class);
profileIntent.putExtra("visit_user_id", list_user_id);
startActivity(profileIntent);
}
if(position == 1){
if(dataSnapshot.child("online").exists()){
Intent chatIntent = new Intent(getContext(), ChatActivity.class);
chatIntent.putExtra("visit_user_id", list_user_id);
chatIntent.putExtra("user_name", userName);
startActivity(chatIntent);
}
else {
UsersReference.child(list_user_id).child("online")
.setValue(ServerValue.TIMESTAMP).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Intent chatIntent = new Intent(getContext(), ChatActivity.class);
chatIntent.putExtra("visit_user_id", list_user_id);
chatIntent.putExtra("user_name", userName);
startActivity(chatIntent);
}
});
}
}
}
});
builder.show();
}
});
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
};
myFriensList.setAdapter(firebaseRecyclerAdapter);
}
public static class FriendsViewHolder extends RecyclerView.ViewHolder{
View mView;
public FriendsViewHolder(View itemView) {
super(itemView);
mView = itemView;
}
public void setDate(String date){
TextView sinceFriendsDate = mView.findViewById(R.id.all_users_status);
sinceFriendsDate.setText(date);
}
public void setUserName(String userName){
TextView userNameDisplay = mView.findViewById(R.id.all_users_username);
userNameDisplay.setText(userName);
}
public void setThumbImage(final String thumbImage, final Context applkicationContext) {
final CircleImageView image = mView.findViewById(R.id.all_users_profile_image);
// Loading images offline
Picasso.get().load(thumbImage).networkPolicy(NetworkPolicy.OFFLINE).placeholder(R.drawable.default_profile)
.into(image, new Callback() {
@Override
public void onSuccess() {
}
@Override
public void onError(Exception e) {
Picasso.get().load(thumbImage).placeholder(R.drawable.default_profile).into(image);
}
});
}
public void setUserOnline(String online_status) {
ImageView onlineStatusView = (ImageView) mView.findViewById(R.id.online_status);
if(online_status.equals(true)){
onlineStatusView.setVisibility(View.VISIBLE);
}
else {
onlineStatusView.setVisibility(View.INVISIBLE);
}
}
}
}
Ниже приведены журналы ошибок:
E / AndroidRuntime: FATAL EXCEPTION: main Процесс: com.koekoe.convo, PID: 15381 java.lang.NullPointerException: попытка вызвать виртуальный метод 'java.lang.String java.lang.Object.toString ()' для пустой ссылки на объект в com.koekoe.convo.FriendsFragment $ 1 $ 1.onDataChange (FriendsFragment.java): 115) на com.google.android.gms.internal.zzbpx.zza (неизвестный источник: 13) на com.google.android.gms.internal.zzbqx.zzZT (неизвестный источник: 2) на com.google.android.gms.internal.zzbra $ 1.run (неизвестный источник: 69) на android.os.Handler.handleCallback (Handler.java:790) на android.os.Handler.dispatchMessage (Handler.java:99) на android.os.Looper.loop (Looper.java:164) в android.app.ActivityThread.main (ActivityThread.java:6494) в java.lang.reflect.Method.invoke (собственный метод) в com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit.java:438) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:807)I / Process: отправка сигнала.PID: 15381 SIG: 9 Приложение прекращено.