java getitemcount_RecyclerView.Adapter中的getItemCount() 返回数组的size是出现异常?

1.问题描述:RecyclerView.Adapter中的getItemCount() 返回数组的size是出现异常.网络用的是okhttp,数据库框架是litepal,功能是从网络上获取JSON数据并把它们存入数据库然后再从数据库读取,在Addcity上显示出来。

2.主要报错信息:

FATAL EXCEPTION: main

Process: com.example.huang.easyweather, PID: 8208

java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference

at com.example.huang.easyweather.CityAdapter.getItemCount(CityAdapter.java:68)

at android.support.v7.widget.RecyclerView.dispatchLayoutStep1(RecyclerView.java:3493)

at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3310)

at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3844)

at android.view.View.layout(View.java:17637)

at android.view.ViewGroup.layout(ViewGroup.java:5575)

at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)

at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)

at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)

at android.view.View.layout(View.java:17637)

at android.view.ViewGroup.layout(ViewGroup.java:5575)

at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)

at android.widget.FrameLayout.onLayout(FrameLayout.java:261)

at android.view.View.layout(View.java:17637)

at android.view.ViewGroup.layout(ViewGroup.java:5575)

at android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:437)

at android.view.View.layout(View.java:17637)

at android.view.ViewGroup.layout(ViewGroup.java:5575)

at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)

at android.widget.FrameLayout.onLayout(FrameLayout.java:261)

at android.view.View.layout(View.java:17637)

at android.view.ViewGroup.layout(ViewGroup.java:5575)

at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)

3.相关代码:

CityAdapter:

public class CityAdapter extends RecyclerView.Adapter {

private List mCityList;

public class ViewHolder extends RecyclerView.ViewHolder{

TextView listItemCityView;

public ViewHolder(View itemView){

super(itemView);

listItemCityView=(TextView)itemView.findViewById(R.id.tv_item_city);

}

}

public CityAdapter(List cityList){

mCityList=cityList;

}

@Override

public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {

View view=LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.city_list_item,viewGroup,false);

return new ViewHolder(view);

}

@Override

public void onBindViewHolder(ViewHolder holder, int position) {

City city=mCityList.get(position);

holder.listItemCityView.setText(city.getCityZh());

}

@Override

public int getItemCount() {

// if(null==mCityList) return 0; //如果有这条语句是不会报错的,但是RecyclerView获取不到数据

return mCityList.size();

}

}

AddActivity:

private List dataList = new ArrayList<>();

private RecyclerView mRecyclerView;

private List cityList; //城市列表

mRecyclerView=(RecyclerView)findViewById(R.id.recycler_view);

LinearLayoutManager layoutManager=new LinearLayoutManager(this);

mRecyclerView.setLayoutManager(layoutManager);//设置布局管理器

CityAdapter adapter=new CityAdapter(cityList);

mRecyclerView.setAdapter(adapter);//设置适配器

//处理获取到的JSON数据并把它们存储在数据库中

public static boolean handleCityResponse(String response){

try {

JSONArray allcities=new JSONArray(response);

for (int i=0;i

JSONObject cityObject=allcities.getJSONObject(i);

City city=new City();

city.setCityId(cityObject.getString("id")); //城市id

city.setCityZh(cityObject.getString("cityZh"));//城市中文名

city.setLeaderZh(cityObject.getString("leaderZh"));//所属市级中文名

city.setProvinceZh(cityObject.getString("provinceZh"));//所属省级中文名

city.setCountryZh(cityObject.getString("countryZh"));//所属国家中文名

//储存在数据库中

city.save();

// Log.d("AddCity","获取的JSON数据存储到数据库成功");

}

return true;

}catch (JSONException e){

e.printStackTrace();

}

return false;

}

public void queryCities(String mSearchCity){

cityList= DataSupport

.select("cityZh")

.where("cityZh = ?",mSearchCity)

.find(City.class);

Log.d("AddCity","1");

for(City city:cityList){

dataList.add(city.getCityZh());

Log.d("AddCity",city.getCityZh());

}

}

public void queryFromServer(String cityAddressJson) {

NetworkUtils.sendOkHttpRequest(cityAddressJson, new Callback() {

@Override

public void onFailure(Call call, IOException e) {

Log.d("AddCity","HTTP连接失败");

}

@Override

public void onResponse(Call call, Response response) throws IOException {

String returnCityName=response.body().string(); //设置希望返回的字符串

boolean result=false;

result=handleCityResponse(returnCityName);//处理返回的JSON数据

if(result){ //如果成功处理,就开始从数据库查询

runOnUiThread(new Runnable() {

@Override

public void run() {

queryCities("北京");

}

});

}

}

});

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值