How to debug a NullPointerException in an Android

2019-09-19 09:04发布

问题:

I have a very simple app which isn't starting correctly. The app should load a splashscreen, and then the main app. For some reason it's now not working -

Logcat:

    02-08 13:30:41.846: E/AndroidRuntime(275): Uncaught handler: thread main exiting due to uncaught exception
02-08 13:30:41.865: E/AndroidRuntime(275): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.KES.GApps/com.KES.GApps.Splashscreen}: java.lang.NullPointerException
02-08 13:30:41.865: E/AndroidRuntime(275):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
02-08 13:30:41.865: E/AndroidRuntime(275):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
02-08 13:30:41.865: E/AndroidRuntime(275):  at android.app.ActivityThread.access$2200(ActivityThread.java:119)
02-08 13:30:41.865: E/AndroidRuntime(275):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
02-08 13:30:41.865: E/AndroidRuntime(275):  at android.os.Handler.dispatchMessage(Handler.java:99)
02-08 13:30:41.865: E/AndroidRuntime(275):  at android.os.Looper.loop(Looper.java:123)
02-08 13:30:41.865: E/AndroidRuntime(275):  at android.app.ActivityThread.main(ActivityThread.java:4363)
02-08 13:30:41.865: E/AndroidRuntime(275):  at java.lang.reflect.Method.invokeNative(Native Method)
02-08 13:30:41.865: E/AndroidRuntime(275):  at java.lang.reflect.Method.invoke(Method.java:521)
02-08 13:30:41.865: E/AndroidRuntime(275):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
02-08 13:30:41.865: E/AndroidRuntime(275):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
02-08 13:30:41.865: E/AndroidRuntime(275):  at dalvik.system.NativeStart.main(Native Method)
02-08 13:30:41.865: E/AndroidRuntime(275): Caused by: java.lang.NullPointerException
02-08 13:30:41.865: E/AndroidRuntime(275):  at android.view.ViewGroup.addViewInner(ViewGroup.java:1860)
02-08 13:30:41.865: E/AndroidRuntime(275):  at android.view.ViewGroup.addView(ViewGroup.java:1756)
02-08 13:30:41.865: E/AndroidRuntime(275):  at android.view.ViewGroup.addView(ViewGroup.java:1736)
02-08 13:30:41.865: E/AndroidRuntime(275):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:217)
02-08 13:30:41.865: E/AndroidRuntime(275):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:207)
02-08 13:30:41.865: E/AndroidRuntime(275):  at android.app.Activity.setContentView(Activity.java:1633)
02-08 13:30:41.865: E/AndroidRuntime(275):  at com.KES.GApps.Splashscreen.onCreate(Splashscreen.java:13)
02-08 13:30:41.865: E/AndroidRuntime(275):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-08 13:30:41.865: E/AndroidRuntime(275):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
02-08 13:30:41.865: E/AndroidRuntime(275):  ... 11 more
02-08 13:30:41.884: I/dalvikvm(275): threadid=7: reacting to signal 3
02-08 13:30:41.884: E/dalvikvm(275): Unable to open stack trace file '/data/anr/traces.txt': Permission denied

xml for the splashscreen (welcome.xml):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/img1"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="200dp"
        android:layout_gravity="fill_horizontal"
        android:contentDescription="@string/crestinfo"
        android:src="@drawable/logov2" />

    <TextView
        android:id="@+id/welcomescreen"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="right"
        android:text="@string/welcomescreen"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textColor="#ffffff"
        android:textStyle="bold" android:padding="5dp" android:textSize="15pt" />

</LinearLayout>

java:

package com.KES.GApps;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;


public class Splashscreen extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.welcome);
        Thread splashThread = new Thread() {
            @Override
            public void run() {
               try {
                  int waited = 0;
                  while (waited < 2000) {
                     sleep(100);
                     waited += 100;
                  }
               } catch (InterruptedException e) {
                  // do nothing
               } finally {
                  finish();
                  Intent i = new Intent();
                  i.setClassName("com.KES.GApps",
                                 "com.KES.GApps.KingEdwardVIISchoolActivity");
                  startActivity(i);
               }
            }
         };
         splashThread.start();
    }
}

Manifest file:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.KES.GApps"
    android:versionCode="6"
    android:versionName="1.5" >

    <uses-sdk android:minSdkVersion="7" />

    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:name="KingEdwardVIISchool"
        android:debuggable="true"
        android:icon="@drawable/icon"
        android:label="@string/app_name"
        android:launchMode="standard" >
        <activity
            android:name="KingEdwardVIISchoolActivity"
            android:configChanges="orientation|keyboardHidden"
            android:label="@string/app_name"
            android:screenOrientation="portrait" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
            </intent-filter>
        </activity>
        <activity
            android:name="Splashscreen"
            android:configChanges="orientation|keyboardHidden"
            android:label="@string/app_name"
            android:screenOrientation="portrait" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

回答1:

According to the LogCat output the problem is in your welcome.xml layout file. It is inflated incorrectly for some reason.

Try removing android:textAppearance="?android:attr/textAppearanceLarge" attribute and ENSURE that you have run Clean.. command on your project before the launch.

Also ENSURE that all the references in the xml-file are valid (i.e. logov2, img1). I would temporarily remove all references from your xml-file and check if it helps.



回答2:

Copy the welcome.xml file and save it anywhere for temporary time then delete this file from the eclipse after delete the file again paste that welcome.xml file which you copied.Then run again.It will sure run your app.



回答3:

I was also suffering from this problem once. Then what i did was i just copied the id of the layout from my R.java and pasted it directly to setContentView(). ie, Here in your case the id of welcome in R.java->layout. then my app ran successfully without any exception. Thus i realized that its just a temporary problem. After restarting my eclipse (sometimes you have to restart your system fully) I replaced the id again by R.layout.welcome and it worked fine. Hope this helps...



回答4:

Have you added the activity in to the manifest and also added the permission?

Please add the manifest so that I can refer you something more?

You have crash may be due to this Permission denied. Check your permission in the manifest.xml.