蠢萌新手仿照写了个android小程序,安装闪退,全部c币奉上,求有爱心的大神帮忙》》》
答
首先 赶快去学下Git版本控制然后连接Github,很简单的。
其次 闪退是你少加了setContentView(R.layout.choose_area); /*布局都没加载进去*/
还有就是楼主的JsonReader的语法是错误的我修改了下
public class Utility {
private static SimpleWeatherDB sSimpleWeatherDB;
public static boolean handleResponse(SimpleWeatherDB simpleWeatherDB, InputStream in) {
/*原先是 simpleWeatherDB = simpleWeatherDB*/
sSimpleWeatherDB = simpleWeatherDB;
JsonReader reader = new JsonReader(new InputStreamReader(in));
boolean flag = false;
try {
reader.beginObject();
while (reader.hasNext()) {
String nodeName = reader.nextName();
if (nodeName.equals("resultcode")) {
/*添加了reader.nextString(),原因是必须获取name的value,否则报错*/
Log.d("Tag","resultcode"+reader.nextString());
flag = true;
} else if (nodeName.equals("result") && flag) {
saveAreaToDatabase(reader);
} else {
reader.skipValue();
}
}
reader.endObject();
//添加了:关闭流
reader.close();
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
/**
* 保存到数据库
*/
private static boolean saveAreaToDatabase(JsonReader reader) {
String provinceName = null;
String cityName = null;
String districtName = null;
List<String> provinceNames = new ArrayList<>();
List<String> cityNames = new ArrayList<>();
boolean changedProvince = false;
boolean changedCity = false;
int provinceId = 0;
int cityId = 0;
int districtId = 0;
Province previousProvince = new Province();
City previousCity = new City();
try {
reader.beginArray();
while (reader.hasNext()) {
reader.beginObject();
while (reader.hasNext()) {
String nodeName = reader.nextName();
if (nodeName.equals("province")) {
provinceName = reader.nextString().trim();
if (!provinceNames.contains(provinceName)) {
provinceNames.add(provinceName);
changedProvince = true;
provinceId++;
}
} else if (nodeName.equals("city")) {
cityName = reader.nextString().trim();
if (!cityNames.contains(cityName)) {
cityNames.add(cityName);
changedCity = true;
cityId++;
Log.d("Utility", "changedCity");
}
} else if (nodeName.equals("district")) {
districtName = reader.nextString().trim();
} else {
reader.skipValue();
}
}
reader.endObject();
if (changedProvince) {
Province province = new Province();
province.setId(provinceId);
province.setProvinceName(provinceName);
previousProvince = province;
sSimpleWeatherDB.saveProvince(province);
changedProvince = false;
}
if (changedCity) {
City city = new City();
city.setId(cityId);
city.setCityName(cityName);
city.setProvinceId(previousProvince.getId());
previousCity = city;
sSimpleWeatherDB.saveCity(city);
changedCity = false;
}
District district = new District();
districtId++;
district.setId(districtId);
district.setDistrictName(districtName);
district.setCityId(previousCity.getId());
sSimpleWeatherDB.saveDistrict(district);
}
reader.endArray();
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
}
还有数据库:
/**
* 从数据库中读取城市下所有的区县信息
*/
public List<District> loadDistricts(int cityId) {
List<District> list = new ArrayList<>();
Cursor cursor = db.query("District",null,"city_id=?",
new String[]{String.valueOf(cityId)},null,null,null);
if (cursor.moveToFirst()) {
do {
District district = new District();
district.setId(cursor.getInt(cursor.getColumnIndex("id")));
//这里应该是名字写错了,原先是city_name
district.setDistrictName(cursor.getString(cursor.getColumnIndex("district_name")));
district.setCityId(cityId);
list.add(district);
} while (cursor.moveToNext());
}
if (cursor != null) {
cursor.close();
}
return list;
}
答
帮忙排查下是什么地方的错误就可以了,自己看不出。。。