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

无法在android studio中启动activity ComponentInfo

闻人杰
2023-03-14

我得到这个错误:

ntime:致命异常:主进程:com.example。puzzle\u项目,PID:4100 java.lang.RuntimeException:无法启动活动ComponentInfo{com.example.puzzle\u项目/com.example.puzzle\u项目.MainActivity}:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.widget.Button.setOnClickListener(android.view.view$OnClickListener)”

但是我不知道问题出在哪里。

我的主要活动是:

package com.example.puzzle_project;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    public static final String EXTRA_TEXT="com.example.application.example.EXTRA_TEXT";
    public static final String EXTRA_NUMBER="com.example.application.example.EXTRA_NUMBER";


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

        Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                openActivity2();

            }
        });
        }

        public void openActivity2(){
            EditText editText1= (EditText) findViewById(R.id.edittext1);
            String text= editText1.getText().toString();

            EditText editText2=(EditText)findViewById(R.id.edittext2);
            int number = Integer.parseInt(editText2.getText().toString());

            Intent intent = new Intent(this, Activity2.class);
            intent.putExtra(EXTRA_TEXT,text);
            intent.putExtra(EXTRA_NUMBER,number);
            startActivity(intent);
        }
    }

共有3个答案

澹台蕴藉
2023-03-14

取出方法的元素,在类活动中不使用findviewbyid对其进行初始化,在方法onClick()中,对元素使用“findviewbyid”,并将这些元素作为方法openActivity2()的参数传递。

我没有尝试过,但我认为这是个问题。

仇迪
2023-03-14

NullPointerException当您尝试使用对象方法或变量为空时发生:-

String name = null;
int len = name.length();

这还会引发NullPointerException。每个html" target="_blank">程序员都会遇到这种类型的错误,这是很常见的,解决这个问题的最好方法是阅读错误,就像你在问题中分享的那样:-

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.puzzle_project/com.example.puzzle_project.MainActivity}:
java.lang.NullPointerException: Attempt to invoke virtual method 'void 
android.widget.Button.setOnClickListener(android.view.View$OnClickListener)'
on a null object reference

让我们试着理解这个错误,它是怎么说的,

第一行是无法启动活动,这意味着OnCreate()方法中存在问题,因为调用了第一个OnCreate()方法来启动任何活动。

第二行是在空对象引用上尝试调用虚拟方法“void android.widget.Button.setOnClickListener(android.view.view$OnClickListener)”,因为您可以阅读此在空对象引用上调用方法的尝试,这意味着您在单击空对象时被调用意味着按钮为空。

现在让我们理解为什么按钮为空,按钮可以为空,原因如下:-

  1. 按钮未初始化(但您已初始化)

现在为什么findViewById()返回null,因为您可能输入了错误的id,而findViewById无法在视图中找到您的id。

简而言之,检查您的View Id和findViewById()它的问题,因为findViewById返回null。

我可以这么说,但我只想让你自己解决你的问题,因为你会在未来得到一个地狱的错误。

感谢阅读

顾宣
2023-03-14

尝试此代码

遵循2件事-

  • 在发送数据之前,请检查是否为空

Android:输入类型="数字"

public class MainActivity extends AppCompatActivity {
    public static final String EXTRA_TEXT = "com.example.application.example.EXTRA_TEXT";
    public static final String EXTRA_NUMBER = "com.example.application.example.EXTRA_NUMBER";


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

        Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                openActivity2();

            }
        });
    }

    public void openActivity2() {
        EditText editText1 = (EditText) findViewById(R.id.edittext1);
        String text = editText1.getText().toString();
        EditText editText2 = (EditText) findViewById(R.id.edittext2);
        String number = (editText2.getText().toString());
       
        if (text.isEmpty() || number.isEmpty()) {
            Toast.makeText(this, "Please add inputs", Toast.LENGTH_LONG).show();
            return;
        }
        
        Intent intent = new Intent(this, Activity2.class);
        intent.putExtra(EXTRA_TEXT, text);
        intent.putExtra(EXTRA_NUMBER, number);
        startActivity(intent);
    }

}
 类似资料:
  • 错误是: 错误:(50,17)错误:没有为startActivities(Intent)方法Activity找到合适的方法。startActivities(Intent[],Bundle)不适用(实际和正式的参数列表长度不同)方法Activity.startActivities(Intent[])方法上下文twrapper.startactivities(Intent[],Bundle)不适用(实

  • 我目前正在一个android项目,当试图运行后构建的应用程序平原崩溃。以下是LogCat详细信息: 2021-11-13 13:37:08.105 11908-11908/com.example.finalprojectE/AndroidRuntime: FATAL EXCEPTION:主进程:com.example.finalproject, PID: 11908java.lang.Runtim

  • 问题内容: 这是我的应用程序级别gradle文件: 编译项目时出现的完整错误是: 错误:任务’:app:transformDexArchiveWithExternalLibsDexMergerForDebug’的执行失败。 java.lang.RuntimeException:com.android.builder.dexing.DexArchiveMergerException:无法合并dex

  • 问题内容: 我尝试在Ubuntu 11.04和Java 6 sun上安装Hadoop。我正在使用hadoop 0.20.203 rc1构建。我在使用Java-6-sun的Ubuntu 11.04上反复遇到问题。当我尝试启动hadoop时,由于“无法访问存储”,datanode无法启动。 我曾尝试从Apache甚至cloudera的0.20分支中升级和降级到几个版本,还尝试再次删除并安装hadoop

  • 问题内容: 升级后去运行jenkins,并获得以下信息: 就是这样…詹金的日志中什么也没有显示…所以很难说很难调试。(它还没有运行,或者类似的东西)。 我应该在其他地方查看另一个日志会有所帮助吗?(我假设对这个问题的回答将是反复的,所以希望有人可以在调试它的道路上开始我的工作) 问题答案: 因此,知道这是一个启动前错误,使我可以进行更深入的研究。 进一步的挖掘使我发现文件中的确切行是指向 看着这个

  • Xampp、mysql、phpmyadmin几天前运行得很好。现在我正遇到这个问题。 Xampp控制面板还提供了以下错误详细信息: 我也试着这样做,这对一些有同样问题的人是有效的 XAMPP-MySQL意外关闭

  • 我在Windows7中配置Hadoop是从教程中设置单个节点集群开始的。当运行来格式化namenode时,它会抛出类似的异常:当自动强制windows namenode时,我可以打开地址为http://localhost:50070的namenode GUI。 yarn-site.xml