【问题标题】:Attempt to invoke virtual method 'java.lang.String com.google.firebase.auth.FirebaseAuth.getUid()' on a null尝试在 null 上调用虚拟方法“java.lang.String com.google.firebase.auth.FirebaseAuth.getUid()”
【发布时间】:2023-03-28 02:56:01
【问题描述】:

在我的 Android 应用中,我使用注册活动上传了用户图片。注册后,会加载 MainActivity 并且需要在 imageview 中显示用户图像。但是没有图像被显示并得到下面

错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.google.firebase.auth.FirebaseAuth.getUid()' on a null object reference

主活动:

public class MainActivity extends AppCompatActivity {

    private  FirebaseAuth firebaseAuth;
    private DatabaseReference databaseReference;
    private StorageReference mStorageRef;
    SharedPreferences sharedpreferences;
    private FirebaseAuth.AuthStateListener authStateListener;
    private FirebaseDatabase firebaseDatabase;
    private FirebaseStorage firebaseStorage;


    String post_key = null;
    public static final String MyPREFERENCES = "MyPrefs";
    private TextView txt,url;
    private ImageView profilePic;
    private Toolbar toolbar;
    private TabLayout tabLayout;
    private ViewPager viewPager;
    private int[] tabIcons = {
            R.drawable.homeico,
          
    };

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

        profilePic = findViewById(R.id.userimg);

        firebaseAuth = FirebaseAuth.getInstance();
        firebaseDatabase = FirebaseDatabase.getInstance();
        firebaseStorage = FirebaseStorage.getInstance();
        databaseReference = FirebaseDatabase.getInstance().getReference();

        DatabaseReference databaseReference = firebaseDatabase.getReference(firebaseAuth.getUid());
        StorageReference storageReference = firebaseStorage.getReference();

        storageReference.child(firebaseAuth.getUid()).child("Images").child("Profile Pic").getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
            @Override
            public void onSuccess(Uri uri) {
               
               Glide.with(MainActivity.this).load(uri).into(profilePic);

            }
        });
       


        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayShowTitleEnabled(false);

        getSupportActionBar().setDisplayHomeAsUpEnabled(false);

        viewPager = (ViewPager) findViewById(R.id.viewpager);
        setupViewPager(viewPager);

        tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);
        setupTabIcons();
    }

    private void setupTabIcons() {
        tabLayout.getTabAt(0).setIcon(tabIcons[0]);
       
    }

    private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFragment(new OneFragment(), "Home");
       
        viewPager.setAdapter(adapter);
    }

    class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();

        public ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }

        @Override
        public Fragment getItem(int position) {
            return mFragmentList.get(position);
        }

        @Override
        public int getCount() {
            return mFragmentList.size();
        }

        public void addFragment(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }

        @Override
        public CharSequence getPageTitle(int position) {

            return null;

        
        }
    }
}

【问题讨论】:

  • 您在哪一行代码中遇到了该错误?您是否还确定调用.getUid()时用户已通过身份验证?
  • 不确定,相当初学者。

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


【解决方案1】:

为了getUid()工作,你需要先让当前用户登录以获取ID

主活动:

public class MainActivity extends AppCompatActivity {

    private  FirebaseAuth firebaseAuth;
    private DatabaseReference databaseReference;
    private StorageReference mStorageRef;
    SharedPreferences sharedpreferences;
    private FirebaseAuth.AuthStateListener authStateListener;
    private FirebaseDatabase firebaseDatabase;
    private FirebaseStorage firebaseStorage;


    String post_key = null;
    public static final String MyPREFERENCES = "MyPrefs";
    private TextView txt,url;
    private ImageView profilePic;
    private Toolbar toolbar;
    private TabLayout tabLayout;
    private ViewPager viewPager;
    private int[] tabIcons = {
            R.drawable.homeico,

    };

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

        profilePic = findViewById(R.id.userimg);

        firebaseAuth = FirebaseAuth.getInstance();
        firebaseDatabase = FirebaseDatabase.getInstance();
        firebaseStorage = FirebaseStorage.getInstance();
        databaseReference = FirebaseDatabase.getInstance().get;

        FirebaseUser currentUser = firebaseAuth.getCurrentUser();
        if (currentUser != null && currentUser.getUid() != null) {
            {
                DatabaseReference databaseReference = firebaseDatabase.getReference(currentUser.getUid());
                StorageReference storageReference = firebaseStorage.getReference();

                storageReference.child(currentUser.getUid()).child("Images").child("Profile Pic").getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                    @Override
                    public void onSuccess(Uri uri) {

                        Glide.with(MainActivity.this).load(uri).into(profilePic);

                    }
                });



                setSupportActionBar(toolbar);
                getSupportActionBar().setDisplayShowTitleEnabled(false);

                getSupportActionBar().setDisplayHomeAsUpEnabled(false);

                viewPager = (ViewPager) findViewById(R.id.viewpager);
                setupViewPager(viewPager);

                tabLayout = (TabLayout) findViewById(R.id.tabs);
                tabLayout.setupWithViewPager(viewPager);
                setupTabIcons();
            }
        }}

    private void setupTabIcons() {
        tabLayout.getTabAt(0).setIcon(tabIcons[0]);

    }

    private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFragment(new OneFragment(), "Home");

        viewPager.setAdapter(adapter);
    }

    class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();

        public ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }

        @Override
        public Fragment getItem(int position) {
            return mFragmentList.get(position);
        }

        @Override
        public int getCount() {
            return mFragmentList.size();
        }

        public void addFragment(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }

        @Override
        public CharSequence getPageTitle(int position) {

            return null;


        }
    }
}

【讨论】:

  • 该代码在 mainactivity 中的什么位置?请提出建议。
  • 是的,在您的 MainActivity 中。无论你在哪里写了firebaseAuth.getUid(),只需用上面的代码替换为 Null 检查
  • 我是这个领域的初学者。试图把但不知道我在哪里做错了。请根据你的建议编辑我的代码并分享。
  • 同样在 currentUser.getUid() 方法上悬停时,它显示 - 条件 'currentUser.getUid() != null' 在达到时始终为真。
  • 任何可以提供帮助的人,请回复。
猜你喜欢
  • 2018-05-12
  • 1970-01-01
  • 2015-12-10
  • 1970-01-01
  • 1970-01-01
  • 2015-07-16
  • 2019-04-23
  • 2018-08-25
  • 2017-09-01
相关资源
最近更新 更多