【问题标题】:Getting NullPointerException first time when Activity loads but working fine second timeActivity 加载时第一次获得 NullPointerException 但第二次工作正常
【发布时间】:2019-10-24 06:04:07
【问题描述】:

我从MainActivity开始EditCardActivity

应用程序首次崩溃,Android 系统显示“再次打开应用程序”的警报。

当我重新打开应用程序时,它按预期工作。

我在这个网站上看到了很多答案,我已经按照这些答案做了,但是没有用。

  • 在调用findViewByID()之前,我已经在onCreate()方法中调用了setContentView()

  • 我已验证我传入的 ID findViewByID() 拼写正确。

  • 我还尝试将EditText 也设为类成员,并在onCreate() 方法中对其进行初始化。

  • 我也尝试过使用onStart()onPostCreate() 方法。

  • 当我尝试调用视图时,我感觉视图尚未加载,因此findViewByID() 返回 null。因此,我尝试使用 Thread.sleep(1000) 给它 1 秒的加载时间,但仍然是同样的问题。

这是有问题的代码部分。

// MainActivity.java
public void editCard(View v) {
    Intent i = new Intent(this, EditCardActivity.class);
    startActivity(i);
}
<!--activity_edit_card.xml-->
...
<EditText
    android:id="@+id/add_card_category_et"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="@dimen/margin"
    android:ems="10"
    android:hint="@string/add_card_category_et_hint"
    android:inputType="text"
    android:textSize="@dimen/font_size" />
...
// EditCardActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_edit_card);

    showContents();
}

private void showContents() {
    EditText editCardCategoryET = findViewById(R.id.add_card_category_et);
    editCardCategoryET.setText(currentCard.getCategory()); // This line is throwing NullPointerException
}

错误

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference

编辑:

我知道导致错误的原因。

我指的是add_card_category_et,而不是edit_card_category_et

前一个视图属于我的应用程序的另一个 Activity 的不同布局文件。

很抱歉我没能发现这个小错误。

虽然很小,但让我卡了 3 天。

无论如何感谢您的回答和cmets。

【问题讨论】:

  • currentCard.getCategory() 将为 null
  • 尝试用一些虚拟文本替换 currentCard.getCategory() 并查看
  • 你在哪里初始化currentCard
  • editCardCategoryET.setText(""+currentCard.getCategory())
  • 您已经做了正确的事情(除了 Thread.sleep 没有帮助)并且您共享的代码应该可以工作。你能发布完整的堆栈跟踪吗?

标签: java android


【解决方案1】:

因为 editCardCategoryET 找不到任何值。所以它抛出Exception。可以通过添加“”来添加额外的字符来解决。然后应用程序不会粉碎。 editCardCategoryET.setText(" "+currentCard.getCategory());

您也可以在 try()、catch() 方法中处理它。

【讨论】:

  • 感谢您的帮助。这不是问题,但我知道错误是什么。我会相应地编辑问题。
  • 没有。 currentCard.getCategory() 工作正常。我在问题的编辑部分提到了解决方案。无论如何感谢您的帮助。
  • 哦,太好了。您确实错误地引用了您的编辑文本。顺便说一下,要在 textview 或 edittext 中设置文本,最好在文本之前使用 "" 。那么它就会减少出现空指针异常的机会。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-29
  • 2012-10-25
  • 1970-01-01
  • 1970-01-01
  • 2020-04-27
  • 1970-01-01
相关资源
最近更新 更多