我已阅读过许多关于致命异常的帖子,但没有帮助我
所以我对Android很新,我正在构建一个非常简单的应用程序,允许你点击一个按钮,然后把你带到另一个页面,你可以点击其他按钮但是一旦我在模拟器上运行它我得到一个“应用程序进程意外停止了”,logcat给了我一个致命的例外 代码是
package my.first.pro;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.*;
import android.view.View.OnClickListener;
public class MyfirstproActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
View button = this.findViewById(R.layout.main);
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent i = new Intent ( MyfirstproActivity.this, Second.class );
}
});
}
}
XML文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/button"
android:layout_width="233dp"
android:layout_height="wrap_content"
android:text="view health care services " />
</LinearLayout>
第二项活动
package my.first.pro;
import android.app.Activity;
import android.os.Bundle;
public class Second extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// TODO Auto-generated method stub
}
}
第二个活动xml文件
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:baselineAligned="false"
android:orientation="vertical" >
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="The following the health care services provided :" /> <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</TextView>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:text="General"/>
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:text="physciatric"/>
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:text="pediatric"/>
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:text="dental"/>
</LinearLayout>
</LinearLayout>
logcat是
12-29 11:15:10.508: E/AndroidRuntime(438): FATAL EXCEPTION: main
12-29 11:15:10.508: E/AndroidRuntime(438): java.lang.RuntimeException: Unable to start activityComponentInfo{my.first.pro/my.first.pro.MyfirstproActivity}: java.lang.NullPointerException
12-29 11:15:10.508: E/AndroidRuntime(438): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
12-29 11:15:10.508: E/AndroidRuntime(438): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
12-29 11:15:10.508: E/AndroidRuntime(438): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
12-29 11:15:10.508: E/AndroidRuntime(438): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
12-29 11:15:10.508: E/AndroidRuntime(438): at android.os.Handler.dispatchMessage(Handler.java:99)
12-29 11:15:10.508: E/AndroidRuntime(438): at android.os.Looper.loop(Looper.java:123)
12-29 11:15:10.508: E/AndroidRuntime(438): at android.app.ActivityThread.main(ActivityThread.java:3683)
12-29 11:15:10.508: E/AndroidRuntime(438): at java.lang.reflect.Method.invokeNative(Native Method)
12-29 11:15:10.508: E/AndroidRuntime(438): at java.lang.reflect.Method.invoke(Method.java:507)
12-29 11:15:10.508: E/AndroidRuntime(438): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
12-29 11:15:10.508: E/AndroidRuntime(438): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12-29 11:15:10.508: E/AndroidRuntime(438): at dalvik.system.NativeStart.main(Native Method)
12-29 11:15:10.508: E/AndroidRuntime(438): Caused by: java.lang.NullPointerException
12-29 11:15:10.508: E/AndroidRuntime(438): at my.first.pro.MyfirstproActivity.onCreate(MyfirstproActivity.java:16)
12-29 11:15:10.508: E/AndroidRuntime(438): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
12-29 11:15:10.508: E/AndroidRuntime(438): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
12-29 11:15:10.508: E/AndroidRuntime(438): ... 11 more
12-29 11:15:24.829: E/AndroidRuntime(448): FATAL EXCEPTION: main
12-29 11:15:24.829: E/AndroidRuntime(448): java.lang.RuntimeException: Unable to start activity ComponentInfo{my.first.pro/my.first.pro.MyfirstproActivity}: java.lang.NullPointerException
12-29 11:15:24.829: E/AndroidRuntime(448): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
12-29 11:15:24.829: E/AndroidRuntime(448): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
12-29 11:15:24.829: E/AndroidRuntime(448): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
12-29 11:15:24.829: E/AndroidRuntime(448): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
12-29 11:15:24.829: E/AndroidRuntime(448): at android.os.Handler.dispatchMessage(Handler.java:99)
12-29 11:15:24.829: E/AndroidRuntime(448): at android.os.Looper.loop(Looper.java:123)
12-29 11:15:24.829: E/AndroidRuntime(448): at android.app.ActivityThread.main(ActivityThread.java:3683)
12-29 11:15:24.829: E/AndroidRuntime(448): at java.lang.reflect.Method.invokeNative(Native Method)
12-29 11:15:24.829: E/AndroidRuntime(448): at java.lang.reflect.Method.invoke(Method.java:507)
12-29 11:15:24.829: E/AndroidRuntime(448): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
12-29 11:15:24.829: E/AndroidRuntime(448): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12-29 11:15:24.829: E/AndroidRuntime(448): at dalvik.system.NativeStart.main(Native Method)
12-29 11:15:24.829: E/AndroidRuntime(448): Caused by: java.lang.NullPointerException
12-29 11:15:24.829: E/AndroidRuntime(448): at my.first.pro.MyfirstproActivity.onCreate(MyfirstproActivity.java:16)
12-29 11:15:24.829: E/AndroidRuntime(448): at andr oid.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
12-29 11:15:24.829: E/AndroidRuntime(448): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
12-29 11:15:24.829: E/AndroidRuntime(448): ... 11 more
答案 0 :(得分:3)
下面
View button = this.findViewById(R.layout.main);
您正试图以错误的方式在“活动”布局中查找“视图”。在布局xml中查找View的正确方法是:
Button button = (Button)findViewById(R.id.button);
并且始终将所有UI控件声明为类级别字段而不是内部方法,因为如果在类级别声明所有元素,则可以在整个Activity中访问它。
修改强>
始终使用此活动模板声明或初始化Ui元素,以便在整个活动中获得更好的UI元素可访问性:
public class MyfirstproActivity extends Activity {
/** Called when the activity is first created. */
//******* ALWAYS DECLARE UI ELEMENTS HERE ********** //
Button button ; //<<< for example
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//** ALWAYS SET layout FOR ACTIVITY BEFORE INITIALIZING UI ELEMENTS **
setContentView(R.layout.main);
//**** ALWAYS INITILIZING UI ELEMENTS IN SIDE onCreate of Activity *** //
button = (Button)findViewById(R.id.button);
}
}
答案 1 :(得分:1)
您以错误的方式声明按钮, 更改此行,
View button = this.findViewById(R.layout.main);
像这样
Button button = this.findViewById(R.id.button);
还必须为第二个Acitvity添加此行
setContentView(int layoutid);
像这样
setContentView(R.layout.main) //First page layout
此方法可帮助我们显示活动的布局,此方法可确定要向用户显示的布局或视图。
答案 2 :(得分:0)
您必须在此
之后添加以下声明 Intent i = new Intent ( MyfirstproActivity.this, Second.class );
startActivity(i); //this will start the new activity.
答案 3 :(得分:-1)
更改行
View button = this.findViewById(R.layout.main);
到此:
View button = this.findViewById(R.id.button);