尝试在空对象引用上调用虚拟方法“void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)”

2024-02-16

问题如下。我有一个登录活动(在 Android Studio 中),几天前运行良好。我不记得更改过任何内容,但是当我上次运行此应用程序时,应用程序在我单击登录按钮后立即关闭。最后一件事是关于 AsyncTask 预执行的祝酒。 我不明白为什么会出现 NullPointerException。 我的注册活动的代码几乎相同,并且工作正常。

这是日志:

05-28 16:04:52.395    1218-1232/system_process V/WindowManager﹕ addAppToken: AppWindowToken{5d89eb token=Token{23ccc93a ActivityRecord{2fe54865 u0 utanashati.reminder/.HomepageActivity t17}}} to stack=1 task=17 at 1
05-28 16:04:52.407  19927-19927/utanashati.reminder D/AndroidRuntime﹕ Shutting down VM
05-28 16:04:52.408  19927-19927/utanashati.reminder E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: utanashati.reminder, PID: 19927
    java.lang.RuntimeException: Unable to start activity
ComponentInfo{utanashati.reminder/utanashati.reminder.HomepageActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)
            at android.app.ActivityThread.access$800(ActivityThread.java:151)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5257)
            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:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
            at utanashati.reminder.HomepageActivity.onCreate(HomepageActivity.java:55)
            at android.app.Activity.performCreate(Activity.java:5990)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)
            at android.app.ActivityThread.access$800(ActivityThread.java:151)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5257)
            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:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
05-28 16:04:52.410    1218-1232/system_process W/ActivityManager﹕ Force finishing activity 1 utanashati.reminder/.HomepageActivity
05-28 16:04:52.411    1218-1232/system_process W/ActivityManager﹕ Force finishing activity 2 utanashati.reminder/.LoginActivity

EDIT 1

我睁大了眼睛,问题不在于LoginActivity,而在于HomepageActivity。这是代码:

import ...

public class HomepageActivity extends Activity implements AdapterView.OnItemSelectedListener {

    protected EditText mAddTaskText;
    protected Spinner mPrioritySpinner;
    protected Button mAddTaskButton;
    protected int intPriority = 0;
    protected String taskText;
    protected Timestamp taskTimestamp;
    protected Task userTask;
    protected JsonGenerator taskJSON;

    @Override
    protected void onCreate(Bundle savedInstanceState) {                        // Starts activity. The state can be restored from savedInstanceState
        super.onCreate(savedInstanceState);                                     // Calls the superclass method (IMPORTANT)
        setContentView(R.layout.activity_homepage);                             // Sets layout from activity_homepage.xml

        mPrioritySpinner = (Spinner) findViewById(R.id.prioritySpinner);        // Creates an ArrayAdapter using the string array and a default spinner layout
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
                R.array.priorityList, android.R.layout.simple_spinner_item);    // Specifies the layout to use when the list of choices appears
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);     // Applies the adapter to the spinner
        mPrioritySpinner.setAdapter(adapter);
        mPrioritySpinner.setOnItemSelectedListener(this);

        mAddTaskText = (EditText) findViewById(R.id.addTaskEditText);           // Finds View by its id in .xml file
        mAddTaskButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(HomepageActivity.this, "Done!", Toast.LENGTH_LONG).show();

                Calendar taskCalendar = Calendar.getInstance();             // Creates new calendar
                long taskTime = taskCalendar.getTimeInMillis();             // Gets time in milliseconds
                taskTimestamp = new Timestamp(taskTime);                    // Creates new Timestamp
                taskText = mAddTaskText.getText().toString();               // Gets description of the task

                userTask.setDate(taskTimestamp);                            // Sets date
                userTask.setText(taskText);                                 // Sets text

                /* Creating JsonGenerator */
                ObjectMapper mapper = new ObjectMapper();
                try {
                    mapper.writeValue(taskJSON, userTask);
                }
                catch (IOException e) {
                    Toast.makeText(HomepageActivity.this, "Could not create JSON", Toast.LENGTH_LONG).show();
                }

                /* Getting out email and password */
                String userPassword = ((EmailPassword) HomepageActivity.this.getApplication()).getPassword();
                String userEmail = ((EmailPassword) HomepageActivity.this.getApplication()).getUserEmail();
                Toast.makeText(HomepageActivity.this, userEmail + " " + userPassword, Toast.LENGTH_LONG).show();

                /* HTTP stuff */
                HttpPoster get = new HttpPoster();
                get.execute(userEmail, userPassword, taskJSON.toString());
            }
        });
    }

    public int getData (String username, String password, String taskJSON) {
        try {
            HttpPost httpPost = new HttpPost("http://something.com/" + username + "/tasks");
            String dataToEncode = username + ":" + password;
            String encodedData = Base64.encodeToString(dataToEncode.getBytes(), Base64.NO_WRAP);
            httpPost.setHeader("Authorization", encodedData);

            try {
                StringEntity taskEntity = new StringEntity(taskJSON, "UTF-8");
                httpPost.setEntity(taskEntity);
            }
            catch (UnsupportedEncodingException e) {
                Toast.makeText(HomepageActivity.this, "Unsupported encoding", Toast.LENGTH_LONG).show();
            }

            HttpClient client = new DefaultHttpClient();
            HttpResponse response = client.execute(httpPost);
            StatusLine statusLine = response.getStatusLine();
            int statusCode = statusLine.getStatusCode();
            if (statusCode == 200) {
                return 1;
            }
            else if (statusCode == 404) { return 2; }
            else if (statusCode == 500) { return 3; }
            else if (statusCode == 409) { return 4; }
            else { return statusCode; }
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        return 0;
    }

    public void onItemSelected(AdapterView<?> parent, View view,
                               int pos, long id) {
        String priority = parent.getItemAtPosition(pos).toString();             // Gets chosen priority
        Toast.makeText(HomepageActivity.this, priority, Toast.LENGTH_LONG).show();
        while (!((priority.equals("Low")) || (priority.equals("Medium")) || (priority.equals("High")))) {
            Toast.makeText(HomepageActivity.this, "Something bad happened. Try to choose again", Toast.LENGTH_LONG).show();
        }
        if (priority.equals("Low")) {
            intPriority = 0;
        }
        else if (priority.equals("Medium")) {
            intPriority = 1;
        }
        else if (priority.equals("High")) {
            intPriority = 2;
        }
        userTask.setPriority(intPriority);                                      // Sets chosen priority
    }

    public void onNothingSelected(AdapterView<?> parent) {
        userTask.setPriority(intPriority);                                      // Sets default priority ("0")
    }

    public class HttpPoster extends AsyncTask<String, Void, Integer> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected Integer doInBackground(String... params) {
            return getData(params[0], params[1], params[3]);
        }

        @Override
        protected void onPostExecute(Integer result) {
            super.onPostExecute(result);
            if (result == 1) {
                Toast.makeText(HomepageActivity.this, "Login successful", Toast.LENGTH_LONG).show();
                Intent takeUserHome = new Intent(HomepageActivity.this, HomepageActivity.class);
                startActivity(takeUserHome);
            }
            else if (result == 2) {
                Toast.makeText(HomepageActivity.this, "No such user", Toast.LENGTH_LONG).show();
            }
            else if (result == 3) {
                Toast.makeText(HomepageActivity.this, "Internal server error: unable to send email", Toast.LENGTH_LONG).show();
            }
            else if (result == 4) {
                Toast.makeText(HomepageActivity.this, "Task already exists", Toast.LENGTH_LONG).show();
            }
            else {
                Toast.makeText(HomepageActivity.this, result.toString(), Toast.LENGTH_LONG).show();
            }
        }
    }
}

和 XML 文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="utanashati.testapp.HomepageActivity">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Add a new task..."
        android:id="@+id/addTaskEditText"
        android:nestedScrollingEnabled="false"
        android:minLines="1"
        android:maxLines="1" />

    <Spinner
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/prioritySpinner"
        android:layout_alignRight="@+id/addTaskButton"
        android:layout_alignEnd="@+id/addTaskButton"
        android:layout_below="@+id/addTaskEditText" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Add task"
        android:id="@+id/addTaskButton"
        android:layout_below="@+id/prioritySpinner"
        android:layout_centerHorizontal="true" />

</RelativeLayout>

您正在调用的按钮似乎不在您正在使用的布局中setContentView(R.layout.your_layout)核实。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尝试在空对象引用上调用虚拟方法“void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)” 的相关文章

  • ArgumentMatchers.any 不得为 null

    我正在尝试测试ViewModel以确保实时数据得到正确更新 然而使用时ArgumentMatchers any 它失败了IllegalStateException saying ArgumentMatchers any mViewModel
  • 在 Java Swing 元素中使用 HTML 样式是不好的做法吗?

    使用 HTML 设置 Swing 元素的样式被认为是不好的做法吗 举个例子 如果我想让标签变大并变红一次 我有两个选择 使用 API 调用 JLabel label new JLabel This is a title label setF
  • 属性文件中的字符串主机名:Java

    这听起来可能是一个非常简单的问题 但我无法找到解决方法 我有一个 config properties 文件 其中包含两个键值 IP 地址和端口号 我读取此配置文件以提取字符串格式的键值 但是 当我尝试使用这些值时 我无法连接到从配置文件中检
  • 免费和付费版本 Android 应用程序的最佳方法?

    我开发了一个 Android 应用程序 我希望它可以作为免费版本和付费版本提供 最好的方法是什么 我可以想到三种解决方案 将项目分成两个分支并维护它们 创建一个库项目并有两个附加项目 一个 免费 版本和一个 付费 版本 使用应用内结算 问
  • Spring Boot 多部分文件始终为 null

    我正在使用 Spring Boot version 1 4 0 RC1 和 Spring Boot Stormpath 1 0 2 我正在尝试使用分段文件上传 但控制器中的 MultipartFile 始终为空 当我使用 RequestPa
  • Elasticsearch NodeBuilder 与 TransportClient

    对于其他 Elasticsearch 开发人员来说 这可能是一个非常简单 而且愚蠢 的问题 这两者之间有什么区别 我正在从 Java Web 应用程序连接到远程 Elasticsearch 服务器 到目前为止我一直在使用 Transport
  • 如何为 App Store 添加关联域? - App Store Connect 的 app-ads.txt 文件

    如您所知 Admob 向发布商发送了有关 app ads txt 文件的电子邮件 Admob 在电子邮件中表示 因此 我们邀请您仔细检查您的 app ads txt 文件 如果 您已经在发布日期之前发布了一份 文件 应发布在列出的网站的根目
  • 如何发现另一个应用程序的意图

    我正在尝试构建一个应用程序来接收来自 StumbleUpon 应用程序的共享 此时 我可以接收浏览器的 共享网址 但是当从 StumbleUpon 共享时 我的应用程序不会显示在列表中 我想我可能没有在清单中注册正确的意图 有什么方法可以找
  • Wildfly 10.1 消耗所有核心

    我们最近将银行应用程序从 java 1 6 升级到 1 8 将 jboss 4 x 升级到 wildfly 10 1 我们观察到 java 消耗了机器上可用的所有核心 10 有人可以告诉是什么原因吗 通常情况下 jboss 4 x 的最大
  • 当通过 Map.put(K, V) 添加值时,是否必须通过 Map.get(K) 返回相同的实例?

    假设您有以下代码 Map
  • 尝试在 android 中使用 Google Maps Android API v2 显示 StreetView 但无法使其正常工作

    我很长时间以来一直在尝试在 Android 中显示特定位置的街景 但不幸的是未能成功 我需要的是 如果我向地图提供位置 LAT LONG 它应该显示该特定位置的街景 以下是显示地图 3D 地图 混合地图 卫星视图等的工作代码 但不显示街景
  • logcat 信息出现在 Android Studio 的“运行”选项卡中

    我的 android studio 运行选项卡很简单 然后它变得更难并给我更多信息 例如 logcat 中的信息 如何禁用或删除第二张图片中出现的更多信息并返回到第一张图片中的第一个外观 我只需要正在运行的 flutter 应用程序的日志输
  • IntelliJ 12 中的 Android Hello World - 找不到 android.app.Activity 类

    请看下文 我感觉 SDK 配置不正确 但我不知道如何解决 我尝试用谷歌搜索答案 但没有人遇到这个确切的问题 难道是我的Java版本不对 这两个 SDK 似乎可能相互冲突 我通过以下方式制作了这个项目 创建新项目 Android gt 应用模
  • 加载带有月份标题的 recyclerview 不同类型适配器

    如果从 api 获取不同的月份名称 则尝试将月份名称显示为标题 在这里 我加载月份标题 但是当我加载标题时 它不会加载其他视图 如果数据不同 我需要将月份加载为标题 并且还加载其他视图持有者 我看到一些例子 他们都在 Model 类中使用
  • Eclipse 在单独的窗口中打开代码

    我正在 eclipse 中编程 在两个显示器设置上运行 在其中一台显示器上 我只获得了项目资源管理器和编辑器作为自定义透视图 而在另一台显示器上 我获得了其他工具 例如控制台 调试 任务 变量 断点等 例如 当我单击任务视图中的任务时 这将
  • 如何在flutter上关注android tv应用程序中的列表视图项目

    我想在 flutter 中构建一个 android 电视应用程序 几乎所有事情都已完成 但一个问题是我无法集中注意力 例如一些弹出效果或边框更改任何告诉用户您现在正在使用此项目的内容 我们在列表视图中迭代的项目 我想要在应用程序中看到的图像
  • Android Studio-公司域名

    在Android Studio中 当您创建新项目时 系统会提示您输入域名 我已经知道您可以制作一个 但是如果您想在 Google Play 商店上分发您的应用程序怎么办 即使我永远不会使用我的域 我是否需要购买一个网络域来分发我的应用程序
  • 混合语言源目录布局

    我们正在运行一个使用多种不同语言的大型项目 Java Python PHP SQL 和 Perl 到目前为止 人们一直在自己的私有存储库中工作 但现在我们希望将整个项目合并到一个存储库中 现在的问题是 目录结构应该是什么样的 我们应该为每种
  • 在 Android 中将列表传递给另一个 Activity

    我已经创建了一个列表 并希望将该列表传递给另一个活动 但当我创建意图时 我在 putExtra 语句上收到错误 只是想知道是否有任何简单的方法来传递字符串列表而不是单个字符串 Thanks private List
  • 将 JSON 发送到 Spring MVC 控制器

    我正在尝试将 JSON 发送到 Spring MVC 控制器 在 Spring MVC 方面 一切都配置正确 下面是代码 但似乎没有运行

随机推荐

  • 为什么将 `this` 分配给 `self` 并运行 `self.method()`?

    我正在阅读来源mongoose https github com LearnBoost mongoose blob master lib collection js L40 Collection prototype onOpen funct
  • Neo4j 合并和原子事务

    我正在运行下面的MERGE从客户端应用程序在 10 个并行线程中查询我的 Neo4j 服务器 newFoo and id所有 10 次运行的参数均相同 MERGE foo Foo id id ON MATCH SET foo newFoo
  • 导出到文件时忽略 Jquery 数据表中标头中的 HTML

    我有一个简单的数据表 我在数据表中添加了一个带有表格标题的自定义工具提示 div 参考 https www w3schools com css tryit asp filename trycss tooltip arrow bottom 当
  • Xcode 4:我的 iPhone 项目已成为 Mac OS 项目..并且我无法更改这一点

    我有两个 iOS 项目 它们在 Xcode 3 下正确构建 并且这些 iPhone 已经在应用商店中销售了一段时间 升级到 Xcode 4 后 Xcode 现在认为这些是 Mac OS 项目 当我选择 项目设置 gt 信息 时 它实际上在顶
  • 如何从带有掩模的轮廓图像中获取像素值?

    我尝试从轮廓图像中提取平均像素值 R G B 然而 我的问题是当我应用下面的代码时 观察到一些奇怪的值 int main cv Mat star imread C Users PC Desktop star starcircle png c
  • Swift 错误“静态成员不能用于类型的实例”

    我想重载我的结构的运算符 但收到消息 静态成员 评级 不能在 GlobalSettings 类型的实例上使用 我已经阅读了这个错误的几个答案 但那里的解决方案对我根本没有帮助 我怎么解决这个问题 struct GlobalSettings
  • Android 内容提供商保护级别和不同的密钥

    我有一个应用程序提供专业版 付费 和免费版 添加支持 两个版本都使用相同的密钥存储进行签名 但每个版本都有自己的密钥别名 现在 我想开发一个与两个版本兼容的插件 通过内容提供商提供数据 数据很敏感 因此我需要只能从我的应用程序 专业版和免费
  • JSLint 的 JS 验证器替代品?

    是 JSLintit就js验证工具而言 还有其他工具吗 据我所知有两个不错的 ESLint http eslint org JSHint http jshint com
  • 多重身份验证使用一页登录laravel

    我是 Laravel 的新手 但我对多重身份验证 Laravel 很好奇 我想制作一些有两个规则的网站 客户和卖家 但是 我希望他们使用相同的登录表单登录 我尝试使用 php artisan make auth 但我不明白如何在一个控制器中
  • 在活动目录中,mailNickname 有何用途?

    在 Active Directory 中 mailNickname 是否应始终等于 samaccountname 或者 它应该始终等于邮件属性 减去 domain 我询问的原因是 我们最近将每个人的主要电子邮件地址更改为first last
  • DeviceContext (HDC) 中的 Alpha 通道

    请帮助我处理 HDC 中的 alpha 通道 我让 HDC dc 抛出 CreateCompatibleDC 然后调用 CreateDIBSection 并可以在内存中找到图像字节 然后调用 DrawFrameControl 到此 dc 一
  • Heroku:SSL 未启用

    所以我的 Rails 3 2 1 应用程序在 Heroku 上运行良好 然后我设置config force ssl true在我的生产配置文件中 打开文件后 我现在收到 SSL 未启用 错误 我以为 Heroku 允许你附带他们的 SSL
  • Powershell 字节数组到 INT

    我有一个包含两个值的字节数组 07 and DE 十六进制 我需要做的是以某种方式连接07DE并从该十六进制值获取十进制值 在这种情况下 它是2014 My code This line gives 11 bytes worth of in
  • 如何使用 Raphael.js 旋转 div?

    我是 Raphael 的新手 我真的很困惑 我想使用 Raphael 的按钮来旋转 div 及其内容 理想情况下 我希望有一个平滑的动画 当单击按钮时 动画从 0 度到 90 度 然后当再次单击按钮时 动画将反转 我想我会更改鼠标单击时的
  • 使用 jQuery 的延迟链接 ajax 请求

    我有一个网络应用程序必须多次调用服务器 到目前为止 我有一个很长的嵌套回调链 但我想使用 jQuerywhen then等功能 但是 使用后我似乎无法让东西再次运行then when get pages run tool html then
  • Objective-C 中的“超级”是什么? (自我!=超级)?

    我已阅读下面的问题和故事SEEMS simple Objective C 中的 super 到底是什么 https stackoverflow com questions 3095360 what exactly is super in o
  • 在存储过程中创建临时表

    我正在为 MySQL 编写第一个存储过程 存储过程需要创建一个临时表 然后向其中插入一些数据 如果我在存储过程之外手动创建一个普通表 那么存储过程不会创建临时表 存储过程将被创建并完全按照我的要求执行 如果我随后将创建临时表添加到存储过程中
  • Java 和 C# 正则表达式兼容吗?

    这两种语言都声称使用 Perl 风格的正则表达式 如果我用一种语言测试正则表达式的有效性 它在另一种语言中是否有效 正则表达式语法有何不同 这里的用例是一个 C NET UI 与最终的 Java 后端实现对话 该实现将使用正则表达式来匹配数
  • symfony2 按属性对对象集合进行排序

    我有这个实体 class Categoria ORM Id ORM Column type integer ORM GeneratedValue protected id ORM Column type string length 100
  • 尝试在空对象引用上调用虚拟方法“void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)”

    问题如下 我有一个登录活动 在 Android Studio 中 几天前运行良好 我不记得更改过任何内容 但是当我上次运行此应用程序时 应用程序在我单击登录按钮后立即关闭 最后一件事是关于 AsyncTask 预执行的祝酒 我不明白为什么会