WYXnn
WYXnn

Reputation: 1

flutter Attempt to invoke virtual method 'void io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onPostResume()' on a null object refere

I tried to use FlutterFragment in AppCompatActivity,according to the api,I override the follow methods here is the code of my activity

public class MainActivity extends AppCompatActivity {

    RadioButton rbTabHotspot;
    RadioButton rbTabHome;
    RadioButton rbTabDiscovery;
    RadioButton rbTabMy;
    RadioGroup rgNavigation;
    int mCurrIndex = 0;
    private FragmentManager mFragmentManager;
    String[] tabSArray = new String[]{"home", "discovery", "hotspot","my"};
    private ArrayList<String> mFragmentTags;
    FlutterFragment flutterFragment;

    @Override
    public void onBackPressed() {
        super.onBackPressed();
        flutterFragment.onBackPressed();
    }

    @Override
    protected void onPostResume() {
        super.onPostResume();
        flutterFragment.onPostResume();
    }

    @SuppressLint("ResourceType")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mFragmentTags = new ArrayList<>(Arrays.asList(tabSArray));
        mFragmentManager = getSupportFragmentManager();

        flutterFragment = BridgetFragment
                .withCachedEngine("mEngine")
                .shouldAttachEngineToActivity(true)
                .renderMode(RenderMode.texture)
                .build();

        setContentView(R.layout.activity_main);

        rbTabDiscovery = findViewById(R.id.rb_tab_discovery);
        rbTabHome = findViewById(R.id.rb_tab_home);
        rbTabHotspot = findViewById(R.id.rb_tab_hotspot);
        rbTabMy = findViewById(R.id.rb_tab_my);
        rgNavigation = findViewById(R.id.rg_navigation);

        initNavigation();
    }

    private void initNavigation() {
        rgNavigation = findViewById(R.id.rg_navigation);

        rgNavigation.setOnCheckedChangeListener((group, checkedId) -> {
            switch (checkedId) {
                case R.id.rb_tab_home:
                    mCurrIndex = 0;

                    showFragment();
                    break;
                case R.id.rb_tab_discovery:
                    mCurrIndex = 1;
                    showFragment();
                    break;
                case R.id.rb_tab_hotspot:
                    mCurrIndex = 2;
                    showFragment();
                    break;
                case R.id.rb_tab_my:
                    mCurrIndex = 3;
                    showFragment();
                    break;
                default:
                    mCurrIndex = 0;
                    showFragment();
                    break;
            }
        });
    }

    private void showFragment() {
        FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();
        Fragment fragment = mFragmentManager.findFragmentByTag(mFragmentTags.get(mCurrIndex));
        if(mCurrIndex == 3){
            fragment = flutterFragment;
        }
        if (fragment == null) {
            fragment = instantFragment(mCurrIndex);
        }
        for (int i = 0; i < mFragmentTags.size(); i++) {
            Fragment f = mFragmentManager.findFragmentByTag(mFragmentTags.get(i));

            if (f != null && f != fragment && f.isAdded()) {
                fragmentTransaction.hide(f);
            }
        }
        if (fragment.isAdded()) {
            fragmentTransaction.show(fragment);
        } else {
            fragmentTransaction.add(R.id.app_content, fragment, mFragmentTags.get(mCurrIndex));
        }
        fragmentTransaction.commitAllowingStateLoss();
        mFragmentManager.executePendingTransactions();
    }


    private Fragment instantFragment(int currIndex) {
        switch (currIndex) {
            case 0:

                return new HomeFragment();
            case 1:
                return new MediaFragment();
            case 2:

                return new HotFragment();
            case 3:
                return flutterFragment;
            default:

                return new HomeFragment();
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        flutterFragment.onPause();
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        flutterFragment.onNewIntent(intent);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        flutterFragment.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }

    @Override
    public void onUserLeaveHint() {
        super.onUserLeaveHint();
        flutterFragment.onUserLeaveHint();
    }

    @Override
    public void onTrimMemory(int level) {
        super.onTrimMemory(level);
        flutterFragment.onTrimMemory(level);
    }
}

but I got an error because of the onPostResume method

2021-04-20 10:20:21.901 16155-16155/com.wyx.myapplication E/AndroidRuntime: FATAL EXCEPTION: main Process: com.wyx.myapplication, PID: 16155 java.lang.RuntimeException: Unable to resume activity {com.wyx.myapplication/com.wyx.myapplication.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onPostResume()' on a null object reference at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4274) at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4306) at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:52) at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2048) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:227) at android.app.ActivityThread.main(ActivityThread.java:7582) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:953) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onPostResume()' on a null object reference at io.flutter.embedding.android.FlutterFragment.onPostResume(FlutterFragment.java:640) at com.wyx.myapplication.MainActivity.onPostResume(MainActivity.java:68) at android.app.Activity.performResume(Activity.java:8080) at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4264) at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4306)  at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:52)  at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)  at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2048)  at android.os.Handler.dispatchMessage(Handler.java:107)  at android.os.Looper.loop(Looper.java:227)  at android.app.ActivityThread.main(ActivityThread.java:7582)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:953) 

I do not know how to resolve this

Upvotes: 0

Views: 2235

Answers (1)

Igor Kluev
Igor Kluev

Reputation: 39

I had the same issue, Seems like this is a problem in FlutterFragment class..

when you call flutterFragment.onPostResume(); inside of FlutterFragment the method onPostResume looks like this:

  @ActivityCallThrough
  public void onPostResume() {
    delegate.onPostResume();
  }

delegate seems to be null which causes the "null object reference"

this issue was reported to flutters github

Upvotes: 0

Related Questions