Нажав на nullPointerExecption в моем проекте Android - PullRequest
0 голосов
/ 28 мая 2019

Привет, я пытаюсь создать приложение для чата.В этом процессе Iam пытается извлечь сообщения, хранящиеся в базе данных, но Iam получает исключение ссылки на пустой объект.

Код, который я использовал для добавления сообщений в базу данных:

    img_btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


            String msg = text_send.getText().toString();
            if(!msg.equals(""))
                sendMessage(fuser.getUid(), currUserId, msg);
            else
                Toast.makeText(MessageActivity.this, "Enter Something", 
            Toast.LENGTH_SHORT).show();
         }
       });


  private void sendMessage(String sender,String receiver,String message)
  {
    DatabaseReference reference = 
    FirebaseDatabase.getInstance().getReference();
    HashMap<String,Object>hashMap = new HashMap<>();
    hashMap.put("sender",sender);
    hashMap.put("receiver",receiver);
    hashMap.put("message",message);

    reference.child("Chats").push().setValue(hashMap);

}

ПРИМЕЧАНИЕ.часть кода работает нормально.Моя база данных корректно обновляется каждый раз, когда я отправляю сообщение.

После этой части я пытался отображать сообщения пользователей, используя следующий код

     DatabaseReference chatref = 
     FirebaseDatabase.getInstance().getReference().child("Chats");
     ArrayList<String> userchats = new ArrayList<>();

     listView = findViewById(R.id.listView);
     final ArrayAdapter <String> arrayAdapter = new ArrayAdapter<String> 
     (this,android.R.layout.simple_list_item_1,userchats);
     listView.setAdapter(arrayAdapter);

     chatref.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(@NonNull DataSnapshot dataSnapshot, 
        @Nullable String s) {

            String value = dataSnapshot.getValue().toString();
            try {
                JSONObject object = new JSONObject(value);
                message = object.getString("message");
            }
            catch (JSONException e) {
                e.printStackTrace();
            }
            userchats.add(message);
            arrayAdapter.notifyDataSetChanged();
        }

        @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) {

        }
        });

Когда я запускал приложение в данный моментЯ получаю сообщение об ошибке, и моя трассировка стека выглядит следующим образом:

         Process: com.kcw.firebasebasics, PID: 10943
         java.lang.NullPointerException: Attempt to invoke virtual method 
         'java.lang.String java.lang.Object.toString()' on a null object 
         reference at android.widget.ArrayAdapter.
         createViewFromResource(ArrayAdapter.java:401)
         at android.widget.ArrayAdapter.getView(ArrayAdapter.java:369)
         at android.widget.AbsListView.obtainView(AbsListView.java:2346)
         at android.widget.ListView.makeAndAddView(ListView.java:1875)

Наконец изображение моей базы данных:

picture of database

Ответы [ 2 ]

1 голос
/ 28 мая 2019

Изменить это:

String value = dataSnapshot.getValue().toString();

в это:

String value = dataSnapshot.child("message").getValue(String.class);
0 голосов
/ 28 мая 2019

Ваш chatref относится к ключу "Чаты", который не является строкой.Возможно, поэтому вы получаете

'java.lang.String java.lang.Object.toString ()' для нулевого объекта

. Вы должны проанализироватьdataSnapshot в класс, подобный этому примеру

Comment comment = dataSnapshot.getValue(Comment.class);

А класс Comment имеет message receiver Sender переменные

Проверьте это Работа со списками данных из Firebase doc

И, наконец, Firebase Android Codelab , показывающий, как создать полноценное приложение для чата под названием Friendly Chat

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...