fragment 请求异步网络数据 数据返回时总是 报空指针

_deadline 2015-06-23 01:55:53
大概情况是这样Activity中包含 viewpager+3个fragment

@Override
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_case_main, container,
false);
listView = (XListView) view.findViewById(R.id.case_listview);
listView.setPullLoadEnable(true);
listView.setPullRefreshEnable(false);
listView.setXListViewListener(this);
mRefreshLayout = (SwipeRefreshLayout) view
.findViewById(R.id.case_swiperefreshlayout);
initListView();
initSwipeRefreshLayout();
LogUtil.log("case fragment called oncreateview");
return view;
}

@Override
public void onResume() {
if (CaseCenterActivity.currentFragment instanceof CaseBaiduFragment)
{
initLogicData();
}
super.onResume();
}

private void initLogicData() {
caseList = new ArrayList<CaseItem>();
CaseHost.getCaseList(this);
}


然后getcaseList();方法

public void getCaseList(final CaseBaseFragment whichFragment) {

String url = UrlUtils.BASEURL + getCondition();
LogUtil.log("URL===================" + url);

client.get(url, new AsyncHttpResponseHandler() {

@Override
public void onSuccess(int statusCode, Header[] headers,
byte[] response) {
String string = new String(response);
if(whichFragment instanceof CaseBaiduFragment)
{
fragmentList.get(0).onsuccess(statusCode, headers, string);
LogUtil.log(string);
}
}

@Override
public void onFailure(int statusCode, Header[] headers,
byte[] response, Throwable throwable)
{
if (!NetworkUtils.isNetworkAvailable()) {
showToast(R.string.network_unaiviable);
}
currentFragment.onFailure(statusCode, headers, new String(response), throwable);

}
});

}


然后在网络返回后会执行
fragmentList.get(0).onsuccess(statusCode, headers, string);

然后在fragment中的onsuccess方法

	@Override
public void onsuccess(int statusCode, Header[] headers, String response) {
mRefreshLayout.setRefreshing(false);
listView.stopLoadMore();
caseList.addAll(JsonUtil.json2ObList(
InvalideJson.ValideJson(response), CaseItem.class));
adapter.notifyDataSetChanged();
}


每当执行到 mRefreshLayout.setRefreshing(false); 这里时就会报空指针,按理说我是在初始化完成后才开始的网络访问,不应该报空指针啊
...全文
368 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Rejang 2016-11-07
  • 打赏
  • 举报
回复
我也是这个问题,不过是在我疯狂切换fragment时才会出现,解决了楼主
栀暖莺飞 2015-06-23
  • 打赏
  • 举报
回复
onResume() 里面的初始化放到oncreateview里面去
_deadline 2015-06-23
  • 打赏
  • 举报
回复
哪位大神给点思路
Hare_ 2015-06-23
  • 打赏
  • 举报
回复
加断点跟踪下mRefreshLayout的赋值,

80,350

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧