【问题标题】:NoClassDefFoundError in SplashScreenSplashScreen 中的 NoClassDefFoundError
【发布时间】:2014-01-07 22:47:44
【问题描述】:

在我的应用程序中,它会打开一个启动画面,然后是 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);

我该如何解决这个问题?希望任何人都可以帮助我。 提前致谢。

【问题讨论】:

  • 是 jar 内的主要活动吗?
  • 我认为在 xml 中使用相对类名会更好。尝试将这一行 android:name="com.emy.healthytips.MainActivity" 更改为 android:name=".MainActivity"
  • @MartinCazares 你指的是哪个罐子??我怎么知道它在罐子里?
  • @dberm22 我试过了,但这并不能解决问题。
  • MainActivity中有静态初始化代码吗?

标签: android splash-screen main-activity


【解决方案1】:

很多事情...

1) 你这样做的方式违背了启动画面的目的。启动屏幕应该在应用程序在后台加载时为用户提供漂亮的图片。您所做的只是增加额外的 2 秒延迟。看看这个帖子:Android SplashScreen

2) 很多人说这个方法在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" 以消除可能的未经检查的拼写错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多