0

我已经阅读了许多关于致命异常的先前帖子,但没有帮助我

所以我对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>

日志猫是

  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
4

4 回答 4

3

这里

View button = this.findViewById(R.layout.main); 

您试图以错误的方式在 Activity 布局中查找视图。在布局 xml 中查找视图的正确方法是:

 Button button = (Button)findViewById(R.id.button); 

并且始终将所有 UI 控件声明为类级别字段而不是内部方法,因为如果您在类级别声明所有元素,那么您可以在整个 Activity 中访问它。

编辑:

始终使用此 Activity 模板来声明或初始化 Ui 元素,以便在整个 Activity 中更好地访问 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); 

   }

}
于 2012-12-29T08:51:19.143 回答
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

此方法帮助我们显示活动的布局,此方法确定向用户显示哪个布局或视图。

于 2019-01-06T16:30:22.773 回答
0

您必须在此之后添加以下语句

 Intent i = new Intent ( MyfirstproActivity.this, Second.class );

 startActivity(i);  //this will start the new activity.
于 2012-12-29T08:57:41.053 回答
-1

换行

View button = this.findViewById(R.layout.main);

对此:

View button = this.findViewById(R.id.button);
于 2012-12-29T09:04:40.887 回答