在ViewPager中更改安装时Android崩溃

在ViewPager中更改安装时Android崩溃,android,android-fragments,android-viewpager,Android,Android Fragments,Android Viewpager,我有一个ViewPager运行两个片段,当应用程序的方向改变时,应用程序崩溃。我在下面附上代码 片段寻呼机适配器: public class PagerAdapter extends FragmentPagerAdapter{ public PagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) {

我有一个ViewPager运行两个片段,当应用程序的方向改变时,应用程序崩溃。我在下面附上代码

片段寻呼机适配器:

public class PagerAdapter extends FragmentPagerAdapter{


    public PagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        Fragment f;

        switch (position) {
        case 0:
            f = new Chemicals1();
            break;
        case 1:
            f = new Chemicals2();
            break;
        default:
            f = new Fragment();
            break;
        }

        return f;
    }

    @Override
    public int getCount() {
        return 2;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        switch (position) {
        case 0:
            return getString(R.string.strChemicalsApplied);
        case 1:
            return getString(R.string.strRawFinished);
        default:
            return "Page " + (position + 1);
        }
    }
}
ViewPager的初始化

 super.onCreate(savedInstanceState);
    setContentView(R.layout.swipe_chemicals);

    //Set up ViewPager and allow app to hold prior pages when off screen
    ChemicalsPager = (ViewPager) findViewById(R.id.chemicals_pager);
    ChemicalsAdapter = new PagerAdapter(getSupportFragmentManager());
    ChemicalsPager.setAdapter(ChemicalsAdapter);
    ChemicalsPager.setOffscreenPageLimit(1);
ViewPager的布局文件:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.view.ViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/chemicals_pager"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.v4.view.PagerTabStrip
    android:id="@+id/pager_title_strip"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="top"
    android:paddingBottom="4dip"
    style="@style/pagerTabStrip" />
设置导致崩溃的已用代码:

private void setPhosphateUsed()
    {
        try
        {
            PhosphateReading = ((SwipeChemicals) getActivity()).getPhosphateReading();
            Double PhosphateUsed = PhosphateReading - Double.parseDouble(txtPhosphateReading.getText().toString());
            txtPhosphateUsed.setText(Double.toString(PhosphateUsed));
        }
        catch (NumberFormatException e) {}
    }

导致
NullPointerException
的原因是,即使实际文本值没有更改,当方向更改时仍调用
GenericTextWatcher
。只需添加
catch(NullPointerException e){}
即可捕获错误并导致应用程序强制关闭。

什么是
us.rns.iepareporting.Chemicals1$GenericTextWatcher.setPhosphateUsed(Chemicals1.java:251)
。这是你的密码,对吗?你能把它寄出去吗?我知道是什么了。因为当它旋转屏幕时,并不是所有的数据都被输入到表单中,但是textwatcher运行它的函数试图用空值进行计算。我刚刚添加了一个“catch(NullPointerException e)对于每个try/catch语句,它修复了我在应用程序旋转时崩溃的问题。True。但是,对于这种特定情况,它可能是修复它的最佳方法。因为有一些方法设置为在EditText的值更改时运行,所以应用程序会在方向更改时运行这些方法。EditText中没有任何信息h是导致应用程序在方向改变时崩溃的原因。如果有更好的方法,我会全力支持,我只是不确定如何解决这个问题。
private void setPhosphateUsed()
    {
        try
        {
            PhosphateReading = ((SwipeChemicals) getActivity()).getPhosphateReading();
            Double PhosphateUsed = PhosphateReading - Double.parseDouble(txtPhosphateReading.getText().toString());
            txtPhosphateUsed.setText(Double.toString(PhosphateUsed));
        }
        catch (NumberFormatException e) {}
    }