wuzg1020 2016-08-09 09:29 采纳率: 5.6%
浏览 1080

json数据返回到ListView,运行崩溃,是列表项太多了吗?

我想利用json返回数据填充到listview中,返回的数据是全国城市列表。点击上方部分切换城市,程序直接崩溃,回到主界面。
主界面:图片说明

点击"北京"进入城市选择界面,但没有城市数据,而且马上退回到主界面:

图片说明

报错这一行:at com.juhe.weather.adapter.CityListAdapter.getView(CityListAdapter.java:52)

CityListAdapter类代码如下:
package com.juhe.weather.adapter;

import java.util.List;

import com.juhe.weather.R;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class CityListAdapter extends BaseAdapter {

private List<String> list;
private LayoutInflater mInflater;

public CityListAdapter(Context context,List<String> list){

    this.list=list;
    mInflater=LayoutInflater.from(context);
}
@Override
public int getCount() {
    // TODO Auto-generated method stub
    return list.size();
}

@Override
public String getItem(int position) {
    // TODO Auto-generated method stub
    return list.get(position);
}

@Override
public long getItemId(int position) {
    // TODO Auto-generated method stub
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup arg2) {
    // TODO Auto-generated method stub
    View rawView=null;
    if(convertView==null){
        rawView=mInflater.inflate(R.layout.item_city_list, null);
    }else{
        rawView=convertView;
    }
    TextView tv_city=(TextView)rawView.findViewById(R.id.tv_city);
    tv_city.setText(getItem(position));
    return rawView;
}

}

CityActivity类代码:
package com.juhe.weather;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.juhe.weather.adapter.CityListAdapter;
import com.thinkland.juheapi.common.JsonCallBack;
import com.thinkland.juheapi.data.weather.WeatherData;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;

public class CityActivity extends Activity {

private ListView lv_city;
private List<String> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_city);
    initViews();
    getCities();

}

private void initViews(){
findViewById(R.id.iv_back).setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        finish();

    }
}); 

lv_city=(ListView)findViewById(R.id.lv_city);

}

private void getCities(){

WeatherData data=WeatherData.getInstance();
data.getCities(new JsonCallBack() {

    @Override
    public void jsonLoaded(JSONObject json) {
        // TODO Auto-generated method stub

        Log.d("CityActivity",json.toString());
        try {
            int code = json.getInt("resultcode");
             int error_code=json.getInt("error_code");
             if(error_code==0&&code==200){
                 list=new ArrayList<String>();
                JSONArray resultArray=json.getJSONArray("result");  
                 Set<String> citySet=new HashSet<String>();
                 for(int i=0;i<resultArray.length();i++){
                     String city=resultArray.getJSONObject(i).getString("city");
                     citySet.add(city);

                 }
                 list.addAll(citySet);
                 CityListAdapter adapter=new CityListAdapter(CityActivity.this, list);
                 lv_city.setAdapter(adapter);
                 lv_city.setOnItemClickListener(new OnItemClickListener() {

                    @Override
                    public void onItemClick(AdapterView<?> arg0, View arg1,
                            int arg2, long arg3) {
                        // TODO Auto-generated method stub
                        Intent intent=new Intent();
                        intent.putExtra("city",list.get(arg2));
                        setResult(1, intent);
                        finish();
                    }

                });

                }
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }



    }
});

}

}

json数据是可以获取的,服务器和网络没有问题,求解?
主界面里,这个"北京"点击事件为:
rl_city.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            startActivityForResult(new Intent(mContext, CityActivity.class), 1);

        }
    });

    回调方法:

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub

    if(requestCode==1&&resultCode==1){
        String city= data.getStringExtra("city");
        mService.getCityWeather(city);

    }
}

是不是行数太多导致崩溃?
  • 写回答

2条回答 默认 最新

  • MEMCOPY- 2016-08-09 09:51
    关注

    数据太多的话 你需要重写适配器就是写个Viewholder优化哈

    评论

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序