真实项目不便全部拿出,这里只拿出我代码的部分跟大家分享一下
java.lang.NullPointerException
/**
* github : https://github.com/oblivion0001/AndroidStudioProjects
* Blog : http://blog.youkuaiyun.com/qq_16666847
* Created by oblivion on 2016/12/3.
*/
public class HomeFragment extends BaseFragment implements IHomeView, BaseConstants.BasePresenter {
@Bind(R.id.home_fl)
FrameLayout homeFl;
@Bind(R.id.pb_loadding)
ProgressBar pbLoadding;
@Bind(R.id.lv_home)
ListView lvHome;
private HomePresenterImpl homePresenter;
private View view;
@Override
public View initView() {
view = View.inflate(MyApplication.mContext, R.layout.home_view, null);
ButterKnife.bind(this, view);
return view;
}
@Override
public void setPresenter(HomePresenterImpl presenter) {
//作用。。
homePresenter = presenter;
}
@Override
public void emptyView() {
}
@Override
public void successView(HomeBean homeBean) {
//ActivityUtils.checkNotNull(pbLoadding);
pbLoadding.setVisibility(View.INVISIBLE);
if (homeBean != null) {
lvHome.setAdapter(new ArrayAdapter<>
//这里如果使用MyApplication.mContext,不会报错,但是如果使用getContent就会出错,真恶心啊
(MyApplication.mContext, android.R.layout.simple_list_item_1, homeBean.topic));
}
}
@Override
public void errorView() {
Toast.makeText(getContext(), "加载失败", Toast.LENGTH_SHORT).show();
}
@Override
public void laddingView() {
pbLoadding.setVisibility(View.VISIBLE);
}
@Override
public void onDestroyView() {
super.onDestroyView();
//这里不要解绑,真恶心,卧槽,解绑之后会空指针
// ButterKnife.unbind(this);
OkHttpUtils.getInstance().cancelTag(this);
System.out.println("移除请求");
}
}
备注部分可以看到使用Content 以及界面销毁部分使用了ButterKnife.unBind(this);
然后我找Bug,一直空指针,由于我采用的是ViewPage 的FragmentStateAdapter导入的,这里我想到了可能是在销毁之后View随着消失了,但是我发现不是,后来又想是OKHttp请求是不是应该在销毁之后取消掉请求结果,卧槽,这尼玛,又测试了半天,原来并不是,最后对策,无意中想到了getContent的周期,以及ButterKnife解绑,分别把这两个修改了一下,又发现原来如果是只更改一个同样会出现空指针异常,最后只能同时修改,这里记录一下,又遇到的小伙伴,希望能帮到你们