onSaveInstanceState空指针

时间:2015-03-19 23:25:46

标签: android nullpointerexception android-fragmentactivity

我在蓝色的月亮中遇到这个错误,似乎无法重现它或找出问题所在:

java.lang.NullPointerException
       at com.example.mike.beerportfoliomaterial.BeerPage.onSaveInstanceState(BeerPage.java:221)
       at android.support.v4.app.Fragment.performSaveInstanceState(Fragment.java:1933)
       at android.support.v4.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1642)
       at android.support.v4.app.FragmentManagerImpl.saveAllState(FragmentManager.java:1710)
       at android.support.v4.app.FragmentActivity.onSaveInstanceState(FragmentActivity.java:524)
       at com.example.mike.beerportfoliomaterial.MainDrawer2.onSaveInstanceState(MainDrawer2.java:193)
       at android.app.Activity.performSaveInstanceState(Activity.java:1253)
       at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1229)
       at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4175)
       at android.app.ActivityThread.access$1000(ActivityThread.java:174)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1327)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:146)
       at android.app.ActivityThread.main(ActivityThread.java:5731)
       at java.lang.reflect.Method.invokeNative(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:515)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
       at dalvik.system.NativeStart.main(NativeStart.java)

BeerPage java代码是:

public class BeerPage extends Fragment  {

    public BeerPage(){}

    String beerId = "";
    String breweryId = "";
    SearchView searchView;
    private UiLifecycleHelper uiHelper;


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.beer_page, container, false);
        Spinner spinner = (Spinner) rootView.findViewById(R.id.statsSpin);
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getActivity(),
                R.array.beerpage, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // The drop down view

        spinner.setAdapter(adapter);

        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {


                switch (position) {
                    case 0:
                        break;
                    case 1:
                        // do whatever stuff you wanna do here
                        Fragment Fragment_one;
                        FragmentManager man= getActivity().getSupportFragmentManager();
                        FragmentTransaction tran = man.beginTransaction();
                        Fragment_one = new TasteTags2();
                        tran.replace(R.id.main, Fragment_one);//tran.
                        tran.addToBackStack(null);
                        tran.commit();
                        break;
                    case 2:
                        Fragment Fragment_two;
                        FragmentManager mantwo= getActivity().getSupportFragmentManager();
                        FragmentTransaction trantwo = mantwo.beginTransaction();
                        Fragment_two = new TasteNotePage();
                        trantwo.replace(R.id.main, Fragment_two);//tran.
                        trantwo.addToBackStack(null);
                        trantwo.commit();
                        break;
                    case 3:
                        Fragment Fragment_three;
                        FragmentManager manthree= getActivity().getSupportFragmentManager();
                        FragmentTransaction tranthree = manthree.beginTransaction();
                        Fragment_three = new FoodPairingsPage();
                        tranthree.replace(R.id.main, Fragment_three);//tran.
                        tranthree.addToBackStack(null);
                        tranthree.commit();
                        break;
                    case 4:
                        Fragment Fragment_four;
                        FragmentManager manfour= getActivity().getSupportFragmentManager();
                        FragmentTransaction tranfour = manfour.beginTransaction();
                        Fragment_four = new ListPage();
                        tranfour.replace(R.id.main, Fragment_four);//tran.
                        tranfour.addToBackStack(null);
                        tranfour.commit();
                        break;


                }


            }

            @Override
            public void onNothingSelected(AdapterView<?> parentView) {
                // your code here
            }

        });


        //body code goes here

        //get user information
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
        String userName = prefs.getString("userName", null);
        String userID = prefs.getString("userID", null);
        final String beerId = prefs.getString("beerID", null);
        breweryId = prefs.getString("breweryID", null);
        final String breweryName = prefs.getString("breweryName", null);
        final String styleName = prefs.getString("styleName", null);
        final String beerName = prefs.getString("lastBeer", null);


        TextView bt = (TextView)rootView.findViewById(R.id.beerBreweryName);
        bt.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // do whatever stuff you wanna do here
                Fragment Fragment_one;
                FragmentManager man= getActivity().getSupportFragmentManager();
                FragmentTransaction tran = man.beginTransaction();
                Fragment_one = new BreweryPage2();




                ((ActionBarActivity)getActivity()).getSupportActionBar().setTitle(breweryName);


                //set beer to get style from
                SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
                SharedPreferences.Editor editor = preferences.edit();
                editor.putString("breweryID",breweryId);
                editor.commit();

                tran.replace(R.id.main, Fragment_one);//tran.
                tran.addToBackStack(null);
                tran.commit();

            }
        });


        TextView bt2 = (TextView)rootView.findViewById(R.id.beerStyleName);
        bt2.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // do whatever stuff you wanna do here

                ((ActionBarActivity)getActivity()).getSupportActionBar().setTitle(styleName);


                Fragment Fragment_two;
                FragmentManager man= getActivity().getSupportFragmentManager();
                FragmentTransaction tran = man.beginTransaction();

                //set beer to get style from
                SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
                SharedPreferences.Editor editor = preferences.edit();
                editor.putString("style",beerId);
                editor.commit();

                Fragment_two = new StylePage2();
                tran.replace(R.id.main, Fragment_two);//tran.
                tran.addToBackStack(null);
                tran.commit();



            }
        });



        String url = "myURL";


        new GetBeerDataJSON2(getActivity(), beerId).execute(url);


        //facebook stuff

        uiHelper = new UiLifecycleHelper(getActivity(), null);
        uiHelper.onCreate(savedInstanceState);


        return rootView;
    }

    //facebook stuff

    @Override
    public void onResume() {
        super.onResume();
        uiHelper.onResume();
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        uiHelper.onSaveInstanceState(outState);
    }

    @Override
    public void onPause() {
        super.onPause();
        uiHelper.onPause();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        uiHelper.onDestroy();
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        uiHelper.onActivityResult(requestCode, resultCode, data, new FacebookDialog.Callback() {
            @Override
            public void onError(FacebookDialog.PendingCall pendingCall, Exception error, Bundle data) {
                Log.e("Activity", String.format("Error: %s", error.toString()));
            }

            @Override
            public void onComplete(FacebookDialog.PendingCall pendingCall, Bundle data) {
                Log.i("Activity", "Success!");
            }
        });
    }






}

2 个答案:

答案 0 :(得分:2)

您可能希望在onCreate回调中移动uiHelper实例化,因为崩溃可能来自onCreateView之前调用的onSaveInstanceState。

答案 1 :(得分:0)

如果您未正确处理配置更改,则会出现此错误。因此,如果您的应用不支持多个方向,即纵向和横向,则必须在清单文件中指定每个活动的方向。

+------------------+
|  sum_col_array   |
+------------------+
| ["12","15","18"] |
+------------------+