【发布时间】: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 没有帮助)并且您共享的代码应该可以工作。你能发布完整的堆栈跟踪吗?