【发布时间】:2019-02-05 07:53:58
【问题描述】:
我有带有片段的底部导航和用于 api 调用的改造
我调用loadFragment来切换片段如下
private boolean loadFragment(Fragment fragment) {
//switching fragment
if (fragment != null) {
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.fragment_container, fragment)
.commit();
return true;
}
return false;
}
问题是我的应用程序崩溃,如果我开始随机点击并快速更改片段,当我检查 logcat 时它在设置一些数据时显示 NPE。
我的 Fragment 由以下方法组成
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_current, container, false);
unbinder = ButterKnife.bind(this, view);
context = getActivity();
callCategoryAPI();
return view;
}
callCategory() 是单独控制器类中的 api 改造调用,并通过 interface 带回响应,然后设置数据。
所以我怀疑我的 API 返回响应(因为它是异步的)但是视图不可用,因为用户已经更改了片段(快速)所以视图为空。
我已经尝试过setuserVisibleHint 也尝试过阻止点击 1200 毫秒,还检查了我的片段视图是否已创建,如何阻止此崩溃?并使改造调用依赖于生命周期?
Logcat
在 com.example.CurrentFragment$1.onApiSuccess(CurrentFragment.java:82) 在 com.example.services.current_statement.CurrentStatementController$2.onResponse(CurrentStatementController.java:91) 在改造2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:70) 在 android.os.Handler.handleCallback(Handler.java:790) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:171) 在 android.app.ActivityThread.main(ActivityThread.java:6606) 在 java.lang.reflect.Method.invoke(Method.java) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:518) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
--
致命异常:java.lang.NullPointerException:尝试调用 虚方法'void android.widget.TextView.setText(java.lang.CharSequence)' 为空 对象引用 在 com.example.fragment.statements.CurrentFragment$1.onApiSuccess(CurrentFragment.java:82) 在 com.example.services.current_statement.CurrentStatementController$2.onResponse(CurrentStatementController.java:91) 在改造2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:70) 在 android.os.Handler.handleCallback(Handler.java:790) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:171) 在 android.app.ActivityThread.main(ActivityThread.java:6606) 在 java.lang.reflect.Method.invoke(Method.java) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:518) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
【问题讨论】:
-
你真的想快速移动你的片段吗?
-
我不想这样做,但这是一个我需要在尽快发布应用程序之前解决的错误
-
请向我们展示完整的崩溃日志
-
你的意思是说如果用户快速移动片段然后应用程序将崩溃。正确的。这就是你想要修复它的原因..
-
完全是@UmangBurman
标签: android android-fragments retrofit bottomnavigationview