Что-то не так в MainActivity, и я не понимаю - PullRequest
0 голосов
/ 29 января 2019

Я новичок здесь и это использование Firebase в Android .. Я использую Android Studio, и это журнал ошибок ..

Process: dioobanu.yahoo.locchatting, PID: 32156
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Class java.lang.Object.getClass()' on a null object reference
    at dioobanu.yahoo.locchatting.MainActivity$1.onDataChange(MainActivity.java:57)
    at com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@16.0.5:75)
    at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@16.0.5:63)
    at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@16.0.5:55)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:145)
    at android.app.ActivityThread.main(ActivityThread.java:7007)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)

Я думаю, что первая ошибка может быть в моей MainActivity здесь:

reference.addValueEventListener(new ValueEventListener(){

        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            User user = dataSnapshot.getValue(User.class);
            username.setText(user.getUsername());
            if (user.getImageURL().equals("default")) {
                profile_image.setImageResource(R.mipmap.ic_launcher);
            } else {
                Glide.with(MainActivity.this).load(user.getImageURL()).into(profile_image);
            }
        }

что-то не так в строке 57 с: User user = dataSnapshot.getValue(User.class);

Любые предложения, пожалуйста?

Кстати, это моя структура данных в базе данных ..

Структура данных на базе Firebase

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Поскольку вы уже находитесь в узле Uid своей структуры базы данных, вам не нужно загружать модель для заполнения данных.

Попробуйте это:

reference.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        //User user = dataSnapshot.getValue(User.class);
        String username = dataSnapshot.child("username").getValue().toString();
        String imageUrl = dataSnapshot.child("imageURL").getValue().toString();
        username.setText(username);
        if (imageUrl.equals("default")) {
            profile_image.setImageResource(R.mipmap.ic_launcher);
        } else {
            Glide.with(MainActivity.this).load(imageUrl).into(profile_image);
        }
    }
0 голосов
/ 30 января 2019

Спасибо, ребята, за ваше внимание. Я очень ценю это. Я попробую все ваши предложения. Я не могу многое объяснить. Остальная часть исходного кода находится в этом видео:

https://www.youtube.com/watch?v=LyAmpfm4ndo&index=3&list=PLzLFqCABnRQftQQETzoVMuteXzNiXmnj8

Я хочу узнать этот код для автологина из этого видео в приложении для чата, но, похоже, все, кто включал меня, сталкиваются с той же ошибкой в ​​этом видео.Это MainActivity:

открытый класс MainActivity расширяет AppCompatActivity {

CircleImageView profile_image;
TextView username;

FirebaseUser firebaseUser;
DatabaseReference reference;


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

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

    profile_image = findViewById(R.id.profile_image);
    username = findViewById(R.id.username);

    firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
    reference = FirebaseDatabase.getInstance().getReference("Users").child(firebaseUser.getUid());

    reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            User user = dataSnapshot.getValue(User.class);
            username.setText(user.getUsername());
            if (user.getImageURL().equals("default")) {
                profile_image.setImageResource(R.mipmap.ic_launcher);
            } else {
                Glide.with(MainActivity.this).load(user.getImageURL()).into(profile_image);
            }
        }


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

        }
    });
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()){
        case R.id.logout:
            FirebaseAuth.getInstance().signOut();
            startActivity(new Intent( MainActivity.this, StartActivity.class));
            finish();
            return true;
    }
    return false;
}

}

А это класс User.class:

открытый класс User{

private String id;
private String username;
private String imageURL;

public User(String id, String username, String imageURL){
    this.id = id;
    this.username = username;
    this.imageURL = imageURL;
}

public User(){
}

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public String getImageURL() {
    return imageURL;
}

public void setImageURL(String imageURL) {
    this.imageURL = imageURL;
}

}

я думаю, что в этой строке чего-то не хватает, о чем я упоминаю в своем вопросе в MainActivity ...

User user = dataSnapshot.getValue (User.class);

Я новичок в программе для Android ... так много всего, что я не понимаю смысла ... и извините, если я ошибаюсь с ответом, потому что я новичокв этом стеке потока ..

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