Java 无法启动活动组件信息-Android
我正在为android创建一个移动应用程序,在谷歌下载连接后,我遇到了一个问题 应用程序崩溃。有人能给我一个理由和如何附上它吗 主要活动触手可及Java 无法启动活动组件信息-Android,java,android,xml,firebase-authentication,Java,Android,Xml,Firebase Authentication,我正在为android创建一个移动应用程序,在谷歌下载连接后,我遇到了一个问题 应用程序崩溃。有人能给我一个理由和如何附上它吗 主要活动触手可及 public class MainActivity extends AppCompatActivity { GoogleSignInClient mGoogleSignInClient; private int RC_SIGN_IN = 3; SignInButton signInButton; @Override protected void on
public class MainActivity extends AppCompatActivity {
GoogleSignInClient mGoogleSignInClient;
private int RC_SIGN_IN = 3;
SignInButton signInButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
signInButton = findViewById(R.id.sign_in_button);
signInButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.sign_in_button:
signIn();
break;
// ...
}
}
});
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build();
mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
}
private void signIn() {
Intent signInIntent = mGoogleSignInClient.getSignInIntent();
startActivityForResult(signInIntent, RC_SIGN_IN);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);
if (requestCode == RC_SIGN_IN) {
// The Task returned from this call is always completed, no need to attach
// a listener.
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
handleSignInResult(task);
}
}
private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
try {
GoogleSignInAccount account = completedTask.getResult(ApiException.class);
Intent intent = new Intent(MainActivity.this, MenuActivity.class);
startActivity(intent);
} catch (ApiException e) {
// The ApiException status code indicates the detailed failure reason.
// Please refer to the GoogleSignInStatusCodes class reference for more information.
Log.w("TAG", "signInResult:failed code=" + e.getStatusCode());
// updateUI(null);
}
}
public类MainActivity扩展了AppCompatActivity{
GoogleSignInClient mGoogleSignInClient;
私有内部RC_符号=3;
SignInButton SignInButton;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
signInButton=findViewById(R.id.sign_in_按钮);
signInButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
开关(view.getId()){
案例R.id.登录按钮:
签名();
打破
// ...
}
}
});
GoogleSignenOptions gso=新建GoogleSignenOptions.Builder(GoogleSignenOptions.DEFAULT\u登录)
.requestEmail()
.build();
mGoogleSignInClient=GoogleSignIn.getClient(this,gso);
}
私人无效签名(){
Intent-signinint=mGoogleSignInClient.getsigninint();
startActivityForResult(签名、注册);
}
@凌驾
ActivityResult上的公共void(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
//从GoogleSignInClient.GetSignInent(…)启动Intent返回的结果;
if(requestCode==RC\u登录){
//此调用返回的任务始终已完成,无需附加
//听众。
Task Task=GoogleSignIn.GetSignedAccountFromIntent(数据);
handleSignInResult(任务);
}
}
私有void handleSignInResult(任务完成任务){
试一试{
GoogleSignInAccount account=completedTask.getResult(ApiException.class);
意向意向=新意向(MainActivity.this、MenuActivity.class);
星触觉(意向);
}捕获(APIE){
//ApiException状态代码表示详细的故障原因。
//有关更多信息,请参阅GoogleSignInstationCodes类参考。
Log.w(“标记”、“签名结果:失败代码=“+e.getStatusCode());
//updateUI(null);
}
}
}
登录后的目标活动:
public class MenuActivity extends AppCompatActivity {
GoogleSignInClient mGoogleSignInClient;
Button logoutBtn;
TextView userName;
ImageView profileImage;
private GoogleSignInOptions gso;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build();
mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
logoutBtn=(Button)findViewById(R.id.button_wyl);
profileImage=(ImageView)findViewById(R.id.profileImage);
userName = findViewById(R.id.name);
logoutBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
switch (view.getId()) {
// ...
case R.id.button_wyl:
signOut();
break;
// ...
}
}
});
GoogleSignInAccount acct = GoogleSignIn.getLastSignedInAccount(this);
if (acct != null) {
String personName = acct.getDisplayName();
Uri personPhoto = acct.getPhotoUrl();
userName.setText(personName);
Glide.with(this).load(String.valueOf(personPhoto)).into(profileImage);
}
}
private void signOut() {
mGoogleSignInClient.signOut()
.addOnCompleteListener(this, new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
Toast.makeText(MenuActivity.this, "Signed out Successfully", Toast.LENGTH_LONG).show();
finish();
}
});
}
公共类菜单活动扩展了AppCompative活动{
GoogleSignInClient mGoogleSignInClient;
按钮logoutBtn;
文本视图用户名;
图像视图轮廓图像;
谷歌私人签名gso;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
GoogleSignenOptions gso=新建GoogleSignenOptions.Builder(GoogleSignenOptions.DEFAULT\u登录)
.requestEmail()
.build();
mGoogleSignInClient=GoogleSignIn.getClient(this,gso);
logoutBtn=(按钮)findviewbyd(R.id.Button_wyl);
profileImage=(ImageView)findViewById(R.id.profileImage);
用户名=findViewById(R.id.name);
logoutBtn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
开关(view.getId()){
// ...
外壳R.id.按钮(wyl):
签出();
打破
// ...
}
}
});
GoogleSignInAccount账户=GoogleSignIn.GetLastSignedAccount(此账户);
如果(帐户!=null){
字符串personName=acct.getDisplayName();
Uri personPhoto=acct.getPhotoUrl();
userName.setText(personName);
将(String.valueOf(personPhoto)).Glide.with(this.load)加载到(profileImage)中;
}
}
私有无效签出(){
mGoogleSignInClient.signOut()
.addOnCompleteListener(这是新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
Toast.makeText(MenuActivity.this,“已成功注销”,Toast.LENGTH_LONG.show();
完成();
}
});
}
}
例外情况:
E/AndroidRuntime:致命异常:主
进程:com.example.goodmath,PID:1780
java.lang.RuntimeException:无法启动activity ComponentInfo{com.example.goodmath/com.example.goodmath.MenuActivity}:
java.lang.NullPointerException:尝试调用虚拟方法“void”
android.widget.Button.setOnClickListener(android.view.view$OnClickListener)'
关于空对象引用
位于android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2913)
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
在android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
在android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)中
在android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)中
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
位于android.os.Handler.dispatchMessage(Handler.java:106)
位于android.os.Looper.loop(Looper.java:193)
位于android.app.ActivityThread.main(ActivityThread.java:6669)
位于java.lang.reflect.Method.invoke(本机方法)
位于com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
原因:java.lang.NullPointerException:尝试调用虚拟方法“void”
android.widget.Button.setOnClickListener(android.view.view$OnClickListener)'
关于空对象引用
位于com.example.goodmath.MenuActivity.onCreate(MenuActivity.java:46)
位于android.app.Activity.performCreate(Activity.java:7136)
位于android.app.Activity.performCreate(Activity.java:7127)
在android.app.instrum上
java.lang.NullPointerException: Attempt to invoke virtual method 'void
android.widget.Button.setOnClickListener(android.view.View$OnClickListener)'
on a null object