安卓问题 照着第一行代码敲的 第14章天气app实战 在点击listview的item时 一直等待出不来结果

coder121 2016-04-21 03:10:38
public class MainActivity extends Activity {
//AppCompatActivity
public static final int LEVEL_PROVINCE = 0;
public static final int LEVEL_CITY= 1;
public static final int LEVEL_COUNTY = 2;

private ProgressDialog progressDialog;
private TextView titleText;
private ListView listView;
private ArrayAdapter<String> adapter;
private CoolWeatherDB coolWeatherDB;
private List<String> dataLits = new ArrayList<String>();
/**
* 省列表
*/
private List<Province> provinceList;
private List<City> cityList;
private List<County> countyList;
/**
* 选中的省份
*/
private Province selectedProvince;
private City selectedCity;
/**
* 当前选中的级别
*/
private int currentLevel;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.choose_area);

listView = (ListView)findViewById(R.id.list_view);
titleText = (TextView)findViewById(R.id.title_text);
adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,dataLits);
listView.setAdapter(adapter);
coolWeatherDB = coolWeatherDB.getInstance(this);

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (currentLevel == LEVEL_PROVINCE) {
selectedProvince = provinceList.get(position);
queryCities();
} else if (currentLevel == LEVEL_CITY) {
selectedCity = cityList.get(position);
queryCounties();
}
}
});
queryProvinces();

}

/**
* 查询全国所有的省,优先从数据库中查询,如果没有查询到再到服务气中查询
*/
private void queryProvinces() {
provinceList = coolWeatherDB.loadProvince();
if(provinceList.size()>0) {
Toast.makeText(this,"从数据库中读取",Toast.LENGTH_LONG).show();
dataLits.clear();
for(Province province:provinceList) {
dataLits.add(province.getProvinceName());
}
adapter.notifyDataSetChanged();
listView.setSelection(0);
titleText.setText("中国");
currentLevel = LEVEL_PROVINCE;
} else {
queryFromServer(null, "province");
Toast.makeText(this,"从服务器中读取",Toast.LENGTH_LONG).show();
}
}
private void queryCities() {
cityList = coolWeatherDB.loadCities(selectedProvince.getId());
if(cityList.size()>0) {
Toast.makeText(this, "数据库", Toast.LENGTH_LONG).show();
dataLits.clear();
for(City city : cityList){
dataLits.add(city.getCityName());
}
adapter.notifyDataSetChanged();
listView.setSelection(0);
titleText.setText(selectedProvince.getProvinceName());
currentLevel = LEVEL_CITY;
}else {
queryFromServer(selectedProvince.getProvinceCode(),"city");
}
}
private void queryCounties() {
countyList = coolWeatherDB.loadConuties(selectedCity.getId());
if(countyList.size()>0) {
Toast.makeText(this, "数据库", Toast.LENGTH_LONG).show();
dataLits.clear();
for(County county : countyList){
dataLits.add(county.getCountyName());
}
adapter.notifyDataSetChanged();
listView.setSelection(0);
titleText.setText(selectedCity.getCityName());
currentLevel = LEVEL_COUNTY;
}else {
queryFromServer(selectedCity.getCityCode(),"county");
}
}

private void queryFromServer(final String code, final String type) {

String address;
if(!TextUtils.isEmpty(code)){
address = "http://www.weather.com.cn/data/list3/city19.xml";
}else {
address = "http://www.weather.com.cn/data/list3/city.xml";
}
//showProgressDialog();
HttpUtil.sendHttpRequest(address, new HttpCallbackListener() {
@Override
public void onFinish(String response) {
boolean result = false;
if ("province".equals(type)) {
result = Utility.handleProvincesResponse(coolWeatherDB, response);
} else if ("city".equals(type)) {
result = Utility.handleCitiesResponse(coolWeatherDB,response,
selectedProvince.getId());
} else if ("county".equals(type)) {
result = Utility.handleCountiesResponse(coolWeatherDB, response,
selectedCity.getId());
}
if (result) {
//通过runOnUiThread方法回到主线程处理逻辑上
runOnUiThread(new Runnable() {
@Override
public void run() {
if (type.equals("province")) {
queryProvinces();
} else if (type.equals("city")) {
queryCities();
} else if (type.equals("county")) {
queryCounties();
}
}
});
}
}
@Override
public void onError(Exception e) {
runOnUiThread(new Runnable() {
@Override
public void run() {
closeProgressDialog();
Toast.makeText(MainActivity.this,"加载失败,服务器挂了",Toast.LENGTH_LONG).show();
}
});
}
});
}

private void showProgressDialog() {
if(progressDialog == null) {
progressDialog = new ProgressDialog(this);
progressDialog.setMessage("正在加载中····");
progressDialog.setCanceledOnTouchOutside(false);
}
progressDialog.show();
}

@Override
public void onBackPressed() {
super.onBackPressed();
if(currentLevel==LEVEL_COUNTY){
queryCities();
}else if(currentLevel==LEVEL_CITY){
queryProvinces();
}else {
finish();
}
}

private void closeProgressDialog(){
if(progressDialog!=null){
[code=java][code=java]
[/code][/code]
progressDialog.dismiss();
}
}
}
...全文
1552 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
键盘舞者113 2018-04-21
  • 打赏
  • 举报
回复
一个问题是中国天气网的接口已经不能使用了
passself 2016-07-04
  • 打赏
  • 举报
回复
楼主保证自己请求是否得到了返回数据,打印一下,如果没有返回数据,你在返回的地方等待肯定出问题了,还有就是你是否监听了异常处理,也许报错了
angle118114 2016-07-04
  • 打赏
  • 举报
回复
我刚刚也是这样,首先那个接口没有过期的。我是saveCity时编码直接复制上面saveProvince的码,结果漏掉了values.put("Province_id",city.getProvinceId());希望能帮到后来者。仔细检查下query语句是否和要查询的table信息一致。
颐牟权月 2016-06-20
  • 打赏
  • 举报
回复
鉴于描述的“一直在加载”的情况,虽然不能debug,然是可以从请求路径开始分析。 很明显,请求省级以下数据时没有带上省的code参数。那么原因基本就是路径写错了。 查看了一下电子书的源码。 if(!TextUtils.isEmpty(code)){ address = "http://www.weather.com.cn/data/list3/city19.xml"; }else { address = "http://www.weather.com.cn/data/list3/"+code+"city.xml"; } 应该可以解决问题了。
baidu_35314524 2016-06-14
  • 打赏
  • 举报
回复
无法获得数据,你从服务器上获得数据失败,是不是服务器的openID设置不对。或者接口设置不对
coder121 2016-04-21
  • 打赏
  • 举报
回复
比如当点击了河北之后 正常的话是会把河北的各个市级列出来的 但是没有 一直在加载 这是什么情况啊 求解答

80,351

社区成员

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

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