我想利用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);
}
}
是不是行数太多导致崩溃?