2017-03-28 32 views
-4

闪屏添加闪屏后,MainActivity出现的错误并强制关闭应用程序

public class SplashScreen extends AppCompatActivity { 

// Splash screen timer 
private static int SPLASH_TIME_OUT = 3000; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_splash_screen); 

    new Handler().postDelayed(new Runnable() { 

     /* 
     * Showing splash screen with a timer. This will be useful when you 
     * want to show case your app logo/company 
     */ 

     @Override 
     public void run() { 
      // This method will be executed once the timer is over 
      // Start your app main activity 
      Intent i = new Intent(SplashScreen.this, MainActivity.class); 
      startActivity(i); 

      // close this activity 
      finish(); 
     } 
    }, SPLASH_TIME_OUT); 
} 

MainActivity

public class MainActivity extends AppCompatActivity { 
private DrawerLayout drawerLayout; 
private Toolbar toolbar; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    if (savedInstanceState == null) { 
     Fragment fragment = null; 
     Class fragmentClass = ProductFragment.class; 
     try { 
      fragment = (Fragment) fragmentClass.newInstance(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     fragmentManager.beginTransaction().replace(R.id.flContent, fragment).commit(); 
    } 

    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    initNavigationDrawer(); 
} 

AndroidManifest

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.hong.user.healthyfx"> 

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

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 

    <activity 
     android:name=".SplashScreen" 
     android:screenOrientation="portrait" 
     android:theme="@style/AppTheme.NoActionBar"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".MainActivity" 
     android:theme="@style/AppTheme.NoActionBar" 
     android:label="@string/app_name"> 
    </activity> 
</application> 

错误的logcat 十一月3日至28日:20:22.921 11653-11653/com.hong.user.healthyfx E/AndroidRuntime:致命异常:主 工艺:com.hong.user.healthyfx,PID :11653 java.lang.RuntimeException:无法启动活动ComponentInfo {com.hong.user.healthyfx/com.hong.user.healthyfx.MainActivity}:java.lang.NullPointerException:试图调用虚拟方法'java.lang。类java.lang.Object.getClass()'在空对象引用 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665) at android.app.ActivityThread.handleLaunchActivity(Activit在Android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1477) at android.os.Handler.dispatchMessage(Handler .java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native方法) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 引起:java。 lang.NullPointerExc eption:尝试在android.support.v4.app.BackStackRecord.doAddOp(BackStackRecord.java:380) 处的null对象引用 上调用虚拟方法'java.lang.Class java.lang.Object.getClass()' android.support.v4.app.BackStackRecord.replace(BackStackRecord.java:430) 在android.support.v4.app.BackStackRecord.replace(BackStackRecord.java:421) 在com.hong.user.healthyfx.MainActivity .onCreate(MainActivity.java:42) 在android.app.Activity.performCreate(Activity.java:6679) 在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 在android.app.ActivityThread。每在android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread $ H.handleMessage(android.app.ActivityThread.AccessThread.java) (ActivityThread.java:1477) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread .java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit。的java:886) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

线42在MainActivity: fragmentManager.beginTransaction()代替(R.id.flContent,片段) 。承诺();

我可以知道我的错误在哪里吗?谢谢。

+0

你能确保你的片段不为空,你期望得到的例外最佳可读性in fragment =(Fragment)fragmentClass.newInstance();并且如果有异常,那么你的片段将是空的,并且你正在推栈栈中的空片段。 – Avi

+0

可能重复[什么是NullPointerException,以及如何解决它?](http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it ) –

+0

显示您的xml布局,其中定义了碎片容器。在使用替换方法之前,您必须确保已初始化容器。 – HaroldSer

回答

0

在MainActivity改变你的代码:

if (savedInstanceState == null) { 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    fragmentManager.beginTransaction().replace(R.id.flContent, new ProductActivity()).commit(); 
} 

对于需要重命名

ProductActivity 

ProductFragment 
0

我发现在你的代码的问题: -

这是您的MainActivity: -

public class MainActivity extends AppCompatActivity { 
private DrawerLayout drawerLayout; 
private Toolbar toolbar; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    if (savedInstanceState == null) { 
     Fragment fragment = null; 
     //How can you provide activity class for fragment initialization and push it in fragment stack. 
     Class fragmentClass = **ProductActivity.class**; 
     //It supposed to be fragment class not Activity. 

     try { 
      fragment = (Fragment) fragmentClass.newInstance(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     fragmentManager.beginTransaction().replace(R.id.flContent, fragment).commit(); 
    } 

    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    initNavigationDrawer(); 
} 
+0

对不起,其实我的productActivity是扩展Fragment。 – Jackie

0

试试这个

if (savedInstanceState == null) { 
     Fragment fragment = ProductActivity.newInstance(); 
     //How can you provide activity class for fragment initialization and push it in fragment stack. 


     FragmentManager fragmentManager = getSupportFragmentManager(); 
     fragmentManager.beginTransaction().replace(R.id.flContent, fragment).commit(); 
    } 
+0

对不起,其实我的productActivity是扩展Fragment。 – Jackie

+0

你试过了吗? –

1

更新您的活动OnCreate()方法:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    if (savedInstanceState == null) { 

     Fragment fragment = new ProductActivity(); // Change fragment class name to ProductFragment 

     FragmentManager fragmentManager = getSupportFragmentManager(); 
     fragmentManager.beginTransaction().replace(R.id.flContent, fragment).commit(); 
    } 
    ......... 
    .............. 
}