java.lang.NullPointerException: при использовании firebase - PullRequest
0 голосов
/ 30 мая 2018

Я работаю над приложением чата с использованием Firebase.Это работало нормально, но затем я попытался что-то сделать для управления учетной записью пользователя, состоящей из отображаемого имени, его статуса и круглого изображения.Я закодировал, но когда я попытался изменить его статус, изменив его из базы данных Firebase, он упал.

StackTrace:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
        at alfachat.mezohn.com.alfachat.SettingsActivity$1.onDataChange(SettingsActivity.java:43)
        at com.google.android.gms.internal.firebase_database.zzfc.zza(Unknown Source)
        at com.google.android.gms.internal.firebase_database.zzgx.zzdr(Unknown Source)
        at com.google.android.gms.internal.firebase_database.zzhd.run(Unknown Source)
        at android.os.Handler.handleCallback(Handler.java:815)
        at android.os.Handler.dispatchMessage(Handler.java:104)
        at android.os.Looper.loop(Looper.java:207)
        at android.app.ActivityThread.main(ActivityThread.java:5728)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)

SettingsActivity.java

package alfachat.mezohn.com.alfachat;

import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
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.ValueEventListener;

import de.hdodenhof.circleimageview.CircleImageView;

public class SettingsActivity extends AppCompatActivity {
    private DatabaseReference mUserDatabase;
    private FirebaseUser mCurrentUser;

    private CircleImageView mDisplayImage;
    private TextView mName;
    private TextView mStatus;

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

        mDisplayImage = (CircleImageView) findViewById(R.id.settings_image);
        mName = (TextView)findViewById(R.id.settings_name);
        mStatus = (TextView) findViewById(R.id.settings_status);

        mCurrentUser = FirebaseAuth.getInstance().getCurrentUser();
        String current_uid = mCurrentUser.getUid();
        mUserDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child(current_uid);
        mUserDatabase.keepSynced(true);
        mUserDatabase.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                @SuppressWarnings("VisibleForTests")
                String name = dataSnapshot.child("name").getValue().toString();
               String image = dataSnapshot.child("image").getValue().toString();
               String status = dataSnapshot.child("status").getValue().toString();
               String thumb_image = dataSnapshot.child("thumb_image").getValue().toString();

               mName.setText(name);
               mStatus.setText(status);


            }

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

            }
        });

    }
}

1 Ответ

0 голосов
/ 30 мая 2018

Пользователь dataSnapshot.getChildren() для извлечения данных

 mUserDatabase.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    @SuppressWarnings("VisibleForTests")


                   for (DataSnapshot imageSnapshot : dataSnapshot.getChildren()) {
                              String name = dataSnapshot.child("name").getValue().toString();
                   String image = dataSnapshot.child("image").getValue().toString();
                   String status = dataSnapshot.child("status").getValue().toString();
                   String thumb_image = dataSnapshot.child("thumb_image").getValue().toString();
                    mName.setText(name);
                   mStatus.setText(status);
                            }
                        }

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

                }
            });

Прямой доступ с использованием объекта

List<User> userList=new ArrayList();
    mUserDatabase.addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                            @SuppressWarnings("VisibleForTests")

                           for (DataSnapshot messageSnapshot: dataSnapshot.getChildren()) {
                                    User user = messageSnapshot.getValue(User.class);
                                    userList.add(user);
                                }
                            }
                        @Override
                        public void onCancelled(@NonNull DatabaseError databaseError) {

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