как выйти из нулевой ошибки pathString в Firebase - PullRequest
1 голос
/ 15 марта 2020

enter image description here Я хочу разработать приложение для чата android для отображения чата между пользователями, у которых есть onClickListener для отправки сообщения в комнату чата. Использование RecyclerView для отображения всех сообщений вместе с childEventListener для изменений в чате в реальном времени.

Однако я столкнулся с проблемой, которая гласит:

не может передать значение NULL для аргумента pathString.

и это мой ChatListActivity код.

public class ChatListActivity extends AppCompatActivity {

private RecyclerView recyclerView;
private RecyclerView.Adapter mAdapter;
private LinearLayoutManager layoutManager;

private EditText user_chat, user_edit;
private Button user_next;
private List<ChatListData> mDataset;

private FirebaseDatabase firebaseDatabase = 
FirebaseDatabase.getInstance();
private DatabaseReference myRef = firebaseDatabase.getReference("chat");

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_chat_list);

    user_chat = (EditText) findViewById(R.id.user_chat);
    user_edit = (EditText) findViewById(R.id.user_edit);
    user_next = (Button) findViewById(R.id.user_next);
    recyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);

    recyclerView.setHasFixedSize(true);
    layoutManager = new LinearLayoutManager(this);
    layoutManager.setReverseLayout(true);
    layoutManager.setStackFromEnd(true);
    recyclerView.setLayoutManager(layoutManager);


    user_next.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (user_edit.getText().toString().equals("") || user_chat.getText().toString().equals("")) {
                return;
            }
            ChatListData chatList = new ChatListData();
            chatList.setChatName(user_chat.getText().toString());
            chatList.setUserName(user_edit.getText().toString());



            Intent intent = new Intent(ChatListActivity.this, ChatActivity.class);
            intent.putExtra("user_chat", chatList.getChatName());
            intent.putExtra("user_edit", chatList.getUserName());
            startActivity(intent);

        }
    });
    showChatList();

}

public void showChatList(){

    mDataset = new ArrayList<>();
    mAdapter = new ChatListAdapter(mDataset,  new View.OnClickListener() {

        @Override
        public void onClick(View v) {
    if (v.getTag() != null) {
        int postion = (int) v.getTag();
        Intent intent = new Intent(ChatListActivity.this, ChatActivity.class);
        intent.putExtra("user_chat", ((ChatListAdapter) mAdapter).getChatList(postion).getChatName());
        intent.putExtra("user_edit", ((ChatListAdapter) mAdapter).getChatList(postion).getUserName());
        startActivity(intent);
    }
}
});



       recyclerView.setAdapter(mAdapter);

        myRef.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                ChatListData chatList = 
                dataSnapshot.getValue(ChatListData.class);
                ((ChatListAdapter)mAdapter).addChatList(chatList);

            }

            @Override
            public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            }

            @Override
            public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {

            }

            @Override
            public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });


    }

}

и это мой код ChatActivity .

public class ChatActivity extends UtilActivity {

private RecyclerView recyclerView;
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager layoutManager;
private List<ChatData> chatDataList;
private EditText EditText_chat;
private Button Button_send;
private String nick;
private FirebaseDatabase database = FirebaseDatabase.getInstance();
private  DatabaseReference myRef = database.getReference();
private String CHAT_NAME ;
private String USER_NAME;
private FirebaseAuth mAuth;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_chat);



    mAuth = FirebaseAuth.getInstance();

    nick = mAuth.getCurrentUser().getEmail();

    Intent intent = getIntent();
    CHAT_NAME = intent.getStringExtra("user_chat");
    USER_NAME = intent.getStringExtra("user_edit");



    Button_send = findViewById(R.id.Button_send);
    EditText_chat = findViewById(R.id.EditText_chat);

    Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
    toolbar.setTitle(CHAT_NAME);
    setSupportActionBar(toolbar);

    Button_send.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           String msg = EditText_chat.getText().toString();

           if(msg != null){
               ChatData chat = new ChatData();
               chat.setNickname(nick);
               chat.setMsg(msg);
               myRef.child("chat").child(CHAT_NAME).push().setValue(chat);
           }
        }
    });
    recyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);

    recyclerView.setHasFixedSize(true);

    layoutManager = new LinearLayoutManager(this);
    recyclerView.setLayoutManager(layoutManager);

    chatDataList = new ArrayList<>();
    mAdapter = new ChatAdapter(chatDataList, ChatActivity.this, nick);
    recyclerView.setAdapter(mAdapter);

    // Write a message to the database
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    myRef = database.getReference();

    openChat();
}
public void openChat(){

    myRef.child("chat").child(CHAT_NAME).addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
            ChatData chat = dataSnapshot.getValue(ChatData.class);
            ((ChatAdapter)mAdapter).addChat(chat);
        }

        @Override
        public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

        }

        @Override
        public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}

}
...