【问题标题】:java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.example.ghifa.mrad.Model.User.getImageurl()' [duplicate]java.lang.NullPointerException:尝试调用虚拟方法'java.lang.String com.example.ghifa.mrad.Model.User.getImageurl()' [重复]
【发布时间】:2019-04-23 02:08:08
【问题描述】:

我想在 Android Studio 上的片段上显示用户信息。当我完成代码时,它没有错误。但是当我在我的设备上运行我的应用程序时,当我转到帐户片段时,应用程序停止工作。当我检查日志猫时,它说:

java.lang.NullPointerException:尝试调用虚拟方法'java.lang.String com.example.ghifa.mrad.Model.User.getImageurl()'

我不知道我应该解决什么问题。有人能帮我吗?这是学校任务。

这是我的 logcat 错误

11-20 17:46:19.829 14051-14051/com.example.ghifa.mrad E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.ghifa.mrad, PID: 14051
    java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.example.ghifa.mrad.Model.User.getImageurl()' on a null object reference
        at com.example.ghifa.mrad.AkunFrg$2.onDataChange(AkunFrg.java:107)
        at com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@16.0.4:75)
        at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@16.0.4:63)
        at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@16.0.4:55)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:160)
        at android.app.ActivityThread.main(ActivityThread.java:5541)
        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:964)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:759)

这是我的 Java

ImageView photo;
ImageView back;

TextView topNama;
TextView topEmail;
TextView mSaldo;
TextView mUsername;
TextView mNama;
TextView mEmail;
TextView mHP;
TextView mAlamat;

Button toEdit;


Uri uriProfileimage;

FirebaseUser firebaseUser;
String profileid;

public AkunFrg() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_akun_frg, container, false);

    firebaseUser = FirebaseAuth.getInstance().getCurrentUser();

    SharedPreferences prefs = getContext().getSharedPreferences("PREFS", Context.MODE_PRIVATE);
    profileid = prefs.getString("profileid", "none");

    photo = view.findViewById(R.id.foto);
    topNama = view.findViewById(R.id.ac_top_nama);
    topEmail = view.findViewById(R.id.ac_top_email);
    mSaldo = view.findViewById(R.id.saldo_akun);
    mUsername = view.findViewById(R.id.ac_username);
    mNama = view.findViewById(R.id.ac_nama);
    mEmail = view.findViewById(R.id.ac_email);
    mHP = view.findViewById(R.id.ac_hp);
    mAlamat = view.findViewById(R.id.ac_alamat);
    toEdit = view.findViewById(R.id.to_edit);

    userinfo();

    if(profileid.equals(firebaseUser.getUid()))
    {
        toEdit.setText("Edit Profil");
    }

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

        }
    });

    return view;
}

private void userinfo()
{
    DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("Users").child(profileid);
    reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            if(firebaseUser != null)
            {
                User user = dataSnapshot.getValue(User.class);

                Glide.with(getContext()).load(user.getImageurl()).into(photo);
                topNama.setText(user.getNama());
                mUsername.setText(user.getUsername());
                mSaldo.setText(user.getSaldo());
                mNama.setText(user.getNama());
                mHP.setText(user.getNo_hp());
                mAlamat.setText(user.getAlamat());
            }

        }

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

        }
    });
}

}

【问题讨论】:

  • Glide.with(getContext()).load(user.getImageurl()).into(photo);这一行打断点并检查用户是否为空
  • 我想给一些建议:-在我看来,在这种情况下,vengerian notaion 是没用的-记住 ctrl+alt+l -如果不需要,请删除空行和双空行他们 -FirebaseDatabase.getInstance().getReference().child("Users").child(profileid) 使用 Builder 模式样式 -删除无用的 cmets -制作字符串常量,不要硬编码字符串 -给有意义的名字

标签: java android firebase android-studio firebase-authentication


【解决方案1】:

写这篇之前

Glide.with(getContext()).load(user.getImageurl()).into(photo);

确保您检查该值是否存在

喜欢这个

if(user.getImageurl() != null){
    Glide.with(getContext()).load(user.getImageurl()).into(photo);
}

或者像这样将代码放在 try/catch 语句中

try{
   Glide.with(getContext()).load(user.getImageurl()).into(photo);
}catch(NullPointerException e){
   Log.e(TAG, e.toString())
}

希望对你有帮助

【讨论】:

  • 还是不行
  • 如果有数据,请记录您的快照。请知道
【解决方案2】:

来自https://firebase.google.com/docs/reference/android/com/google/firebase/database/DataSnapshot.html

传入的类的一个实例,填充了来自此的数据 快照,如果此位置没有数据,则为 null

我怀疑 dataSnapshot.getValue(User.class); 返回 null。

【讨论】:

    猜你喜欢
    • 2015-07-16
    • 2015-12-10
    • 2021-08-22
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多