当前位置: 首页 > 知识库问答 >
问题:

我对空点异常有一些问题

贺元明
2023-03-14

我试图创建一个Uid代码,我遇到了这个关于NullPointExctive的问题:


    package com.example.musicmates;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.NotificationCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.recyclerview.widget.RecyclerView;
import androidx.appcompat.widget.Toolbar;

import android.content.Intent;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;


import com.google.android.material.navigation.NavigationView;
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 com.google.firebase.database.annotations.NotNull;
import com.squareup.picasso.Picasso;

import java.util.Set;

import de.hdodenhof.circleimageview.CircleImageView;

public class MainActivity extends AppCompatActivity {
private NavigationView navigationView;
private DrawerLayout drawerLayout;
private RecyclerView postList;
private Toolbar mToolbar;
private CircleImageView NavProfileImage;
private TextView NavProfileUserName;
private ActionBarDrawerToggle actionBarDrawerToggle;
private FirebaseAuth mAuth;
private DatabaseReference UsersRef;
String currentUserID;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        navigationView = findViewById(R.id.navigaition_view);

        mAuth = FirebaseAuth.getInstance();
        currentUserID = mAuth.getCurrentUser().getUid();

        UsersRef = FirebaseDatabase.getInstance().getReference().child("Users");


        mToolbar = findViewById(R.id.main_page_toolbar);
        setSupportActionBar(mToolbar);
        getSupportActionBar().setTitle("Home");

        drawerLayout = findViewById(R.id.drawable_layout);
        actionBarDrawerToggle = new ActionBarDrawerToggle(MainActivity.this,drawerLayout,R.string.drawer_open,R.string.drawer_close);
        drawerLayout.addDrawerListener(actionBarDrawerToggle);
        actionBarDrawerToggle.syncState();
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        View navView = navigationView.inflateHeaderView(R.layout.navigation_header);
        NavProfileImage = navView.findViewById(R.id.nav_profile_image);
        NavProfileUserName = navView.findViewById(R.id.nav_profile_full_name);


        UsersRef.child(currentUserID).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if(dataSnapshot.exists()){
                    String fullname = dataSnapshot.child("fullname").getValue().toString();
                    String image = dataSnapshot.child("profileimage").getValue().toString();
                    NavProfileUserName.setText(fullname);
                    Picasso.get().load(image).placeholder(R.drawable.profile).into(NavProfileImage);
                }
            }

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

            }
        });

        navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
                UserMenuSelector(menuItem);
                return false;
            }
        });

    }


    @Override
    protected void onStart() {
        super.onStart();
        FirebaseUser currentUser = mAuth.getCurrentUser();
        if(currentUser == null){
            SendUserToLoginActivity();
        }
        else{
            CheckUserExistence();
        }
    }

    private void CheckUserExistence()
    {
        final String current_user_id = mAuth.getCurrentUser().getUid();

        UsersRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot)
            {
                if(!dataSnapshot.hasChild(current_user_id))
                {
                    SendUserToSetupActivity();
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

    }

    private void SendUserToSetupActivity() {
        Intent setupIntent = new Intent(MainActivity.this, SetupActivity.class);
        setupIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        startActivity(setupIntent);
        finish();
    }

    private void SendUserToLoginActivity() {
        Intent loginIntent = new Intent(MainActivity.this,LoginActivity.class);
        loginIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TASK);
        startActivity(loginIntent);
        finish();
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        if(actionBarDrawerToggle.onOptionsItemSelected(item)){
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    private void UserMenuSelector(MenuItem menuItem) {
        switch (menuItem.getItemId()){
            case R.id.nav_post:
                Toast.makeText(this, "Add new post", Toast.LENGTH_SHORT).show();
                break;
            case R.id.nav_profile:
                Toast.makeText(this, "Profile", Toast.LENGTH_SHORT).show();
                break;
            case R.id.nav_home:
                Toast.makeText(this, "Home", Toast.LENGTH_SHORT).show();
                break;
            case R.id.nav_friends:
                Toast.makeText(this, "Friends", Toast.LENGTH_SHORT).show();
                break;
            case R.id.nav_find_friends:
                Toast.makeText(this, "Find Friends", Toast.LENGTH_SHORT).show();
                break;
            case R.id.nav_message:
                Toast.makeText(this, "Message", Toast.LENGTH_SHORT).show();
                break;
            case R.id.nav_setting:
                Toast.makeText(this, "Setting", Toast.LENGTH_SHORT).show();
                break;
            case R.id.nav_logout:
                Toast.makeText(this, "Log out", Toast.LENGTH_SHORT).show();
                mAuth.signOut();
                SendUserToLoginActivity();
                break;
        }
    }
}


2019-11-02 11:46:36.860 16810-16810/com。实例musicmates E/AndroidRuntime:致命异常:主进程:com。实例musicmates,PID:16810 java。lang.RuntimeException:无法启动活动组件信息{com.example.musicmates/com.example.musicmates.MainActivity}:java。lang.NullPointerException:尝试调用虚拟方法“java”。lang.String.com.google.火力基地。啊。FirebaseUser。android上的空对象引用上的getUid()。应用程序。活动线程。在android上执行LaunchActivity(ActivityThread.java:2817)。应用程序。活动线程。android上的handleLaunchActivity(ActivityThread.java:2892)。应用程序。活动线程-android上的wrap11(未知来源:0)。应用程序。android上的ActivityThread$H.handleMessage(ActivityThread.java:1593)。操作系统。汉德勒。android上的dispatchMessage(Handler.java:105)。操作系统。活套。android上的loop(Looper.java:164)。应用程序。活动线程。java上的main(ActivityThread.java:6541)。朗,反思一下。方法在com上调用(本机方法)。Android内部的操作系统。合子$MethodandArgscaler。在com上运行(Zygote.java:240)。Android内部的操作系统。合子体。main(ZygoteInit.java:767)由以下原因引起:java。lang.NullPointerException:尝试调用虚拟方法“java”。lang.String.com.google.火力基地。啊。FirebaseUser。getUid()'位于com上的空对象引用上。实例音乐教师。主要活动。android上的onCreate(MainActivity.java:56)。应用程序。活动android上的performCreate(Activity.java:6975)。应用程序。仪器。android上的callActivityOnCreate(Instrumentation.java:1213)。应用程序。活动线程。performLaunchActivity(ActivityThread.java:2770)

共有1个答案

万俟嘉珍
2023-03-14

在您的应用程序build.gradle中,将其添加到您的依赖项

compile'com.google.firebase:firebase认证:x.x.x'(最新版本)

将此添加到onCreate中的以下行:NavigationView=findViewById(R.id.navigaition_view);

mAuth = FirebaseAuth.getInstance();
if (mAuth.getCurrentUser() != null) {
         currentUserID = mAuth.getCurrentUser().getUid();   
        }else{
             finish();
             SendUserToLoginActivity();
   }

onstart中删除检查方法。清理和重建你的项目,让我知道它是否有效。

 类似资料:
  • 我试图模拟一些静态方法,但得到以下堆栈跟踪 DAQHelper是一个静态类,它是从我当前正在测试的方法调用的。为了保持故事简短,我有一个方法addMetricData(…)调用getCategoryResource(…)等此getCategoryResource(…)是一个公共静态方法,它反过来调用getDomainResource(DAQHelper中的私有静态方法)。getDomainReso

  • 本文向大家介绍常见的异常类有哪些?相关面试题,主要包含被问及常见的异常类有哪些?时的应答技巧和注意事项,需要的朋友参考一下 NullPointerException 空指针异常 ClassNotFoundException 指定类不存在 NumberFormatException 字符串转换为数字异常 IndexOutOfBoundsException 数组下标越界异常 ClassCastExce

  • NullPointerException:空指针异常; SQLException:数据库相关的异常; IndexOutOfBoundsException:数组下角标越界异常; FileNotFoundException:打开文件失败时抛出; IOException:当发生某种IO异常时抛出; ClassCastException:当试图将对象强制转换为不是实例的子类时,抛出此异常; NoSuchM

  • 今天分享的是设计面试中关于工作经验的问题:你有哪些优点和缺点? 面试官的可能目的: 1.你的自我认知:面试时间短暂,很难在短短1h内充分了解一个候选人,这个时候可以通过询问候选人的优点和缺点,来观察下候选人的自我认知如何,是否和面试官自己的感知基本一致; 2.你的个性:一般会据此判断你是否适合面试官的团队; 针对这个问题的回答思路: 最重要的就是,要符合团队性格偏好,这部分要求一般会在JD中有所体

  • 我在使用recycler视图启动活动时出错,因此我有3个文件java类、一个适配器和要执行的活动。 java类只是一个具有3个变量的简单对象 回收器视图的适配器 以及活动 我得到的错误是: 我在一个空项目上做了同样的配置,一切看起来都是正确的,

  • 我正在使用SharedReferences获取一些保存的值。我只在某些设备上收到空指针异常。当我在自己的设备上测试代码时,我没有遇到任何问题。但我的一些用户却犯了错误。 下面是我的课程,以了解SharedReference的价值: 在我的主类中,我声明mainActivity变量。 以下是我得到的错误: java.lang.运行时异常:无法启动活动 ComponentInfo{com.playsi