颤振 尝试在空对象引用上调用虚拟方法'void io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onPostResum



我试图在AppCompatActivity中使用FlutterFragment,根据api,我覆盖了以下方法这是我的活动的代码

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);
}
}

但是由于onPostResume方法,我出现了一个错误

2021-04-20 10:20:21.901 16155-16155/com.wyx.myapplication E/AndroidRuntime:致命异常:main进程:com.wyx.myapplication,PID:16155java.lang.RuntimeException:无法恢复活动{com.wyx.myapplication/com.wyx.myapplication.MainActivity}:java.lang.NullPointerException:尝试在null对象引用上调用虚拟方法"void io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onPostResume(("在android.app.ActivityThread.performResumeActivity(ActivityThreads.java:4274(在android.app.ActivityThread.handleResultActivity(ActivityThreads.java:4306(在android.app.servertransaction.RemoteActivityItem.execure(ResumeActivityItem.java:52(在android.app.servertransaction.TransactionExecutor.executeLifeecycleState(TransactionExecutor.java:176(在android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97(在android.app.ActivityThread$H.handleMessage(ActivityThreads.java:2048(在android.os.Handler.dispatchMessage(Handler.java:107(在android.os.Looper.loop(Looper.java:227(在android.app.ActivityThread.main(ActivityThreads.java:7582(位于java.lang.reflect.Method.ioke(本机方法(网址:com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539(网址:com.android.internal.os.ZygoteInit.main(ZygoteNit.java:953(由以下原因引起:java.lang.NullPointerException:试图对null对象引用调用虚拟方法"void io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onPostResume(("在io.flutter.embedding.android.FlutterFragment.onPostResume(FlutterFragment.java:640(网址:com.wyx.myapplication.MainActivity.onPostResume(MainActivity.java:68(在android.app.Activity.performResume(Activity.java:8080(在android.app.ActivityThread.performResumeActivity(ActivityThreads.java:4264(在android.app.ActivityThread.handleResultActivity(ActivityThreads.java:4306(在android.app.servertransaction.RemoteActivityItem.execure(ResumeActivityItem.java:52(在android.app.servertransaction.TransactionExecutor.executeLifeecycleState(TransactionExecutor.java:176(在android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97(在android.app.ActivityThread$H.handleMessage(ActivityThreads.java:2048(在android.os.Handler.dispatchMessage(Handler.java:107(在android.os.Looper.loop(Looper.java:227(在android.app.ActivityThread.main(ActivityThreads.java:7582(位于java.lang.reflect.Method.ioke(本机方法(网址:com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539(网址:com.android.internal.os.ZygoteInit.main(ZygoteNit.java:953(

我不知道如何解决这个

我遇到了同样的问题,似乎这是FlutterFragment类中的一个问题。。

当您调用flatterFragment.onPostResume((时;FlutterFragment内部PostResume上的方法如下:

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

delegate似乎为null,这导致";空对象引用";

这个问题被报告给了flutters github

相关内容

最新更新