SplashScreen中的NoClassDefFoundError

时间:2014-01-07 22:47:45

标签: android splash-screen main-activity

在我的应用程序中,它会打开一个启动画面,然后打开MainActivity。我写了以下代码

SplashActivity.java

    public class SplashActivity extends Activity {

    private final int SPLASH_DISPLAY_LENGHT = 2000;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);

        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                /* Create an Intent that will start the Menu-Activity. */
                Intent intent = new Intent(SplashActivity.this, MainActivity.class);
                startActivity(intent);
                finish();
            }
        }, SPLASH_DISPLAY_LENGHT);
    }
}

MainActiviy.java

here

我添加了MainActivity和SplashActivity,表现如下:

    <activity
        android:name="com.emy.healthytips.SplashActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
     </activity>

    <activity
        android:name="com.emy.healthytips.MainActivity"
        android:label="@string/app_name"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:launchMode="singleTop">
        <meta-data
            android:name="android.app.default_searchable"
            android:value=".MainActivity" />

        <meta-data
            android:name="android.app.searchable"
            android:resource="@xml/searchable" />

        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>

         <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />

            <data
                android:host="com.emy.healthytips.MainActivity"
                android:scheme="oauth" />
        </intent-filter>
    </activity>

但它给了我以下例外

FATAL EXCEPTION: main
java.lang.NoClassDefFoundError: com.emy.healthytips.MainActivity
at com.emy.healthytips.SplashActivity$1.run(SplashActivity.java:20)

在这一行

Intent intent = new Intent(SplashActivity.this, MainActivity.class);

我该如何解决这个问题?希望有人能帮助我。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

多件事......

1)你这样做的方式违背了闪屏的目的。当应用程序在后台加载时,启动屏幕应该为用户提供漂亮的图片。你所做的只是增加额外的2秒延迟。看一下这篇文章:Android SplashScreen

2)很多人说这种方法不适用于&lt; 4.0。不确定原因,但只是抬头(https://stackoverflow.com/a/5486970/2066079

3)而不是:

startActivity(intent);
finish();

你应该使用:

SplashActivity.this.startActivity(intent);
SplashActivity.this.finish();

您想要使用活动的startActivity()版本而不是Runnable。这可能是不必要的,但如果它没有帮助,至少这是一个好习惯。

4)另外,就像我在评论中提到的那样,在xml中使用android:name=".MainActivity"代替android:name="com.emy.healthytips.MainActivity"是首选,以消除可能未经检查的拼写错误。