应用程序在旋转Android设备时停止

时间:2013-08-20 11:28:46

标签: android

我的应用程序中有五个选项卡,分别表示A,B,C,D和E.我的问题是,在将选项卡从B更改为任何其他选项卡并将设备旋转到横向模式或纵向模式时,应用程序停止了。

错误日志

  

08-22 11:27:22.835:E / AndroidRuntime(5992):致命异常:主要   08-22 11:27:22.835:E / AndroidRuntime(5992):java.lang.RuntimeException:无法启动活动ComponentInfo {com.nv.netmdapp1 / com.nv.netmdapp1.Home}:java.lang.NullPointerException   08-22 11:27:22.835:E / AndroidRuntime(5992):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)   08-22 11:27:22.835:E / AndroidRuntime(5992):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)   08-22 11:27:22.835:E / AndroidRuntime(5992):在android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3351)   08-22 11:27:22.835:E / AndroidRuntime(5992):在android.app.ActivityThread.access $ 700(ActivityThread.java:123)   08-22 11:27:22.835:E / AndroidRuntime(5992):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1151)   08-22 11:27:22.835:E / AndroidRuntime(5992):在android.os.Handler.dispatchMessage(Handler.java:99)   08-22 11:27:22.835:E / AndroidRuntime(5992):在android.os.Looper.loop(Looper.java:137)   08-22 11:27:22.835:E / AndroidRuntime(5992):在android.app.ActivityThread.main(ActivityThread.java:4424)   08-22 11:27:22.835:E / AndroidRuntime(5992):at java.lang.reflect.Method.invokeNative(Native Method)   08-22 11:27:22.835:E / AndroidRuntime(5992):at java.lang.reflect.Method.invoke(Method.java:511)   08-22 11:27:22.835:E / AndroidRuntime(5992):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784)   08-22 11:27:22.835:E / AndroidRuntime(5992):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)   08-22 11:27:22.835:E / AndroidRuntime(5992):at dalvik.system.NativeStart.main(Native Method)   08-22 11:27:22.835:E / AndroidRuntime(5992):引起:java.lang.NullPointerException   08-22 11:27:22.835:E / AndroidRuntime(5992):at com.nv.netmdapp1.ScheduleDailyView.onActivityCreated(ScheduleDailyView.java:89)   08-22 11:27:22.835:E / AndroidRuntime(5992):在android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1468)

下面给出的Java代码。

  

public void onActivityCreated(Bundle savedInstanceState){           // TODO自动生成的方法存根           super.onActivityCreated(savedInstanceState);           dailyFragment =(SherlockFragment)Fragment.instantiate(appContext,AppointmentDailyView.class.getName(),arguments);           weeklyFragment =(SherlockFragment)Fragment.instantiate(appContext,AppointmentWeeklyView.class.getName(),arguments);

    FragmentTransaction ft = getFragmentManager().beginTransaction();
    Fragment lastFrag = getFragmentManager().findFragmentByTag("appointmentFrag");
    if(lastFrag!=null)
        ft.remove(lastFrag);
    ft.replace(R.id.ll_appointment_layout, dailyFragment);
    ft.commit();
}
@Override
public void onClick(View view) 
{
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    Fragment lastFrag = getFragmentManager().findFragmentByTag("appointmentFrag");
    if(lastFrag!=null)
        ft.remove(lastFrag);
    if(view==btnDaily)
        ft.replace(R.id.ll_appointment_layout, dailyFragment);
    else
        ft.replace(R.id.ll_appointment_layout, weeklyFragment);
    ft.commit();
}

单击Tab C时,将执行此部分。但旋转设备控制时,将转到Tab B的onActivityCreated()。 这里空指针异常发生行ScheduleDailyView.java:89与Tab B.But相关联,而旋转设备控件则从选项卡C和D转到此文件。这是什么原因?

2 个答案:

答案 0 :(得分:3)

在android清单中添加android:configChanges="orientation",它处理应用程序中的方向更改事件。

清单:

 <activity
        android:name=".MainActivity"
        android:label="@string/title_activity_main" 
        android:configChanges="orientation"
        >

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

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

希望对你有所帮助..

答案 1 :(得分:0)

旋转设备会再次重启您的应用:

调用OnActivityCreated方法,您将在此处获得空指针异常:

Caused by: java.lang.NullPointerException
08-20 16:54:43.319: E/AndroidRuntime(5646):     at com.nv.netmdapp1.ScheduleDailyView.onActivityCreated(ScheduleDailyView.java:89)

在此处检查null是什么,也可以通过处理配置更改来避免重新启动旋转活动。