java.lang.RuntimeException:无法实例化活动组件信息java.lang.NullPointerException
我只是在学习Android编程方面迈出了一小步。我正在学习一些关于Android编程的教程,在学习如何实现onKeyListener时,我遇到了一个错误“java.lang.RuntimeException:无法实例化activity ComponentInfo java.lang.NullPointerException”。尝试在我的手机上运行应用程序时,此错误导致另一个错误“adt不幸应用程序已停止”。以下是日志:java.lang.RuntimeException:无法实例化活动组件信息java.lang.NullPointerException,java,android,Java,Android,我只是在学习Android编程方面迈出了一小步。我正在学习一些关于Android编程的教程,在学习如何实现onKeyListener时,我遇到了一个错误“java.lang.RuntimeException:无法实例化activity ComponentInfo java.lang.NullPointerException”。尝试在我的手机上运行应用程序时,此错误导致另一个错误“adt不幸应用程序已停止”。以下是日志: 05-15 15:55:22.087: D/AndroidRuntime(2
05-15 15:55:22.087: D/AndroidRuntime(20672): Shutting down VM
05-15 15:55:22.087: W/dalvikvm(20672): threadid=1: thread exiting with uncaught exception (group=0x41ea1ba8)
05-15 15:55:22.087: E/AndroidRuntime(20672): FATAL EXCEPTION: main
05-15 15:55:22.087: E/AndroidRuntime(20672): Process: com.example.keyboardlistener, PID: 20672
05-15 15:55:22.087: E/AndroidRuntime(20672): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.keyboardlistener/com.example.keyboardlistener.MainActivity}: java.lang.NullPointerException
谢谢大家的回复。以下是我当前的代码:
Activity_Main.xml:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.keyboardlistener.MainActivity"
tools:ignore="MergeRootFrame" />
<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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.keyboardlistener.MainActivity$PlaceholderFragment" >
<TextView
android:id="@+id/TextResults"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hi" />
<EditText
android:id="@+id/editTextUserEntry1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/TextResults"
android:layout_marginTop="58dp"
android:layout_toRightOf="@+id/TextResults"
android:ems="10" >
<requestFocus />
</EditText>
</RelativeLayout>
看起来您在这里使用的是Fragment
s,这意味着所有涉及UI的操作都应该在Fragment
中完成
调用FragmentManager.beginTransaction()
是一项异步任务,这意味着当它完成任务时,不能保证片段
已经膨胀或没有膨胀,因此ed
很可能为null,导致ed.setOnKeyListener()
要抛出NullPointerException
请退出此代码
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment())
.commit();
}
因为您正在实现一个片段,所以您可以在主布局中的gui组件视图中找到,因为您的片段位于顶部。原因:java.lang.NullPointerException
Caused by: java.lang.NullPointerException
at android.app.Activity.findViewById(Activity.java:1884)
at com.example.keyboardlistener.MainActivity.<init>(MainActivity.java:18)
在android.app.Activity.findviewbyd(Activity.java:1884)上
在com.example.keyboardlistener.MainActivity上。(MainActivity.java:18)
初始化MainActivity
成员变量时,调用findViewById()
太早了。该活动还没有窗口
将初始化移动到
setContentView()
之后的onCreate()
。在onCreate()
阶段将有一个窗口
(没有像这样的NPE),假设视图位于您使用setContentView()
设置的布局中,您实际上可以在setContentView()之后找到一些内容。如果视图位于片段布局中,请将初始化移到片段onCreateView()
(有关该操作的更多信息,请参阅)谢谢大家的回复。.我尝试删除了savedinstancestate代码。.但没有帮助。.这是MainActivity.java中修改过的代码。你能把你的XML布局放在这里吗?用所有的代码更新了主帖,可能重复的代码检查日志猫,看看是哪一行导致了NPE。我用修改过的代码更新了根评论。.它仍然存在不适用于meI已使用修改后的代码更新根注释。如果我将代码移动到占位符片段中的onCreateView,meI仍然不适用。我收到一个错误。无法对非静态方法findViewById进行静态引用。请在膨胀的片段rootView
上调用它。例如rootView.findViewById(…)
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment())
.commit();
}
Caused by: java.lang.NullPointerException
at android.app.Activity.findViewById(Activity.java:1884)
at com.example.keyboardlistener.MainActivity.<init>(MainActivity.java:18)