fragment 请求异步网络数据 数据返回时总是 报空指针
大概情况是这样Activity中包含 viewpager+3个fragment
然后getcaseList();方法
然后在网络返回后会执行
fragmentList.get(0).onsuccess(statusCode, headers, string);
然后在fragment中的onsuccess方法
每当执行到 mRefreshLayout.setRefreshing(false); 这里时就会报空指针,按理说我是在初始化完成后才开始的网络访问,不应该报空指针啊
@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); 这里时就会报空指针,按理说我是在初始化完成后才开始的网络访问,不应该报空指针啊
...全文
相关推荐
Activity/Fragment结束时处理异步回调的解决方案
主要介绍了关于在Activity/Fragment结束时处理异步回调的解决方案,文中介绍的非常详细,对大家的学习或者工作具有一定的参考价值,需要的朋友们下面来一起看看吧。
Android异步网络请求框架,超简单实用
现在各种网络请求框架五花八门,不过大多都是粘贴来粘贴去的,着实让人蛋疼。 现在整理出一个条理清晰,使用起来很方便的框架,是基于android_asynchttp_client
Android异步请求网络图片demo
Android异步请求网络图片demo,博客地址:http://blog.csdn.net/yayun0516
fragment 切换不需要不停的实例化view
自己在项目中需要用到4个fragment切换但在快速切换当中导致网络资源在回传过程中因为执行ondestroyview()而是数据找不到视图从而会出现空指针。
详解Android的OkHttp包编写异步HTTP请求调用的方法
OkHttp支持Callback异步回调来实现线程的非阻塞,下面我们就来详解Android的OkHttp包编写异步HTTP请求调用的方法,需要的朋友可以参考下


