正在学习android的第一行代码的coolweather遇到了点问题

245 阅读3分钟

app启动之后没有报错,但是进了省之后,再进入城市,县的数据显示不出来,一直显示在加载。查了一天网站了,还是没有解决,有谁能我看看我吗?

ChooseAreaFragment代码

import android.app.ProgressDialog; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast;

import androidx.appcompat.widget.ButtonBarLayout; import androidx.fragment.app.Fragment;

import com.example.coolweather.db.City; import com.example.coolweather.db.County; import com.example.coolweather.db.Province; import com.example.coolweather.util.HttpUtil; import com.example.coolweather.util.Utility;

import org.litepal.crud.DataSupport;

import java.io.IOException; import java.util.ArrayList; import java.util.List;

import okhttp3.Call; import okhttp3.Callback; import okhttp3.Response;

public class ChooseAreaFrament extends Fragment {

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 Button backButton;

private ListView listView;

private ArrayAdapter<String> adapter;

private List<String> dataList = new ArrayList<>();

/**
*   省列表
 */

private List<Province> provinceList;

/**
 * 市列表
 */

private List<City> cityList;

/**
 * 县列表
 */
private  List<County>countyList;

/**
 * 选中的省份
 */
private Province selectedProvince;

/**
 * 选中的城市
 */
private City selectedCity;



/**
 * 当前选中的级别
 */
private int currentLevel;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.choose_area,container,false);
    titleText = (TextView) view.findViewById(R.id.title_text);
    backButton = (Button) view.findViewById(R.id.back_button);
    listView = (ListView)view.findViewById(R.id.list_view);
    adapter = new ArrayAdapter<>(getContext(),android.R.layout.simple_list_item_1,dataList);
    listView.setAdapter(adapter);
    return view;
}

@Override
public void onActivityCreated(Bundle savedInstanceState){
    super.onActivityCreated(savedInstanceState);
    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();
            }
        }
    });

    backButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (currentLevel == LEVEL_COUNTY) {
                queryCities();
            } else if (currentLevel == LEVEL_CITY){
                queryProvinces();
            }
        }
    });
    queryProvinces();
}

/**
 * 查询全国所有的省,优先数据库查询,如果没有查询到再去服务器上查询
 */
private void queryProvinces(){
    titleText.setText("中国");
    backButton.setVisibility(View.GONE);
    provinceList = DataSupport.findAll(Province.class);
    if (provinceList.size() > 0){
        dataList.clear();
        for (Province province : provinceList){
            dataList.add(province.getProvinceName());
        }
        adapter.notifyDataSetChanged();
        listView.setSelection(0);
        currentLevel = LEVEL_PROVINCE;
    } else {
        String address = "http://guolin.tech/api/china";
        queryFromServer(address,"province");
    }
}

/**
 * 查询全国所有的城市,优先数据库查询,如果没有查询到再去服务器上查询
 */

private void queryCities(){
    titleText.setText(selectedProvince.getProvinceName());
    backButton.setVisibility(View.VISIBLE);
    cityList = DataSupport.where("provinceid = ?",String.valueOf(selectedProvince.
            getId())).find(City.class);
    if(cityList.size() > 0){
        dataList.clear();
        for(City city : cityList){
            dataList.add(city.getCityName());
        }
        adapter.notifyDataSetChanged();
        listView.setSelection(0);
        currentLevel = LEVEL_CITY;
    }else{
        int provinceCode = selectedProvince.getProvinceCode();
        String address = "http://guolin.tech/api/china/" + provinceCode;
        queryFromServer(address,"city");
    }
}

/**
 * 查询全国所有的县,优先数据库查询,如果没有查询到再去服务器上查询
 */
private void queryCounties(){
    titleText.setText(selectedCity.getCityName());
    backButton.setVisibility(View.VISIBLE);
    countyList = DataSupport.where("cityid = ?",String.valueOf(selectedCity.
            getId())).find(County.class);
    if(countyList.size() > 0 ){
        dataList.clear();
        for(County county : countyList){
            dataList.add(county.getCountyName());
        }
        adapter.notifyDataSetChanged();
        listView.setSelection(0);
        currentLevel = LEVEL_COUNTY;
    }else{
        int provinceCode = selectedProvince.getProvinceCode();
        int cityCode = selectedCity.getCityCode();
        String address = "http://guolin.tech/api/china/" + provinceCode + "/" +
                cityCode;
        queryFromServer(address,"county");
    }
}

/**
 * 根据传入的地址和类型从服务器上查询省市县数据
 */

private void queryFromServer(String address,final String type){
    showProgressDialog();
    HttpUtil.sendOkHttpRequest(address, new Callback() {

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            String responseText = response.body().string();
            boolean result = false;

            if("province".equals(type)){
                result = Utility.handleProvinceResponse(responseText);
            } else if ("city".equals(type)){
                result = Utility.handleCityResponse(responseText,selectedProvince.getId());
            } else if ("county".equals(type)){
                result = Utility.handleCountyResponse(responseText,selectedCity.getId());
            }

            if (result){
                getActivity().runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        closeProgressDialog();
                        if ("province".equals(type)){
                            queryProvinces();
                        } else if ("city".equals(type)){
                            queryCities();
                        } else if ("county".equals(type))
                            queryCounties();
                    }
                });
            }
        }

        @Override
        public void onFailure(Call call, IOException e) {

            //通过runOnUiTread()方法回到主线程处理逻辑
            getActivity().runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    closeProgressDialog();
                    Toast.makeText(getContext(),"加载失败",Toast.LENGTH_SHORT).show();
                }
            });
        }
    });


}

/**
 * 显示进度对话框
 */
private void showProgressDialog(){
    if (progressDialog == null){
        progressDialog = new ProgressDialog(getActivity());
        progressDialog.setMessage("正在加载...");
        progressDialog.setCanceledOnTouchOutside(false);
    }
    progressDialog.show();
}

/**
 * 关闭进度对话框
 */
private void closeProgressDialog(){
    if (progressDialog != null){
        progressDialog.dismiss();

    }
}

}

Utility代码 import android.text.TextUtils;

import com.example.coolweather.db.City; import com.example.coolweather.db.County; import com.example.coolweather.db.Province;

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

public class Utility {

/**
 * 解析和处理服务器返回的省级数据
 */

public static boolean handleProvinceResponse(String response){
    if (!TextUtils.isEmpty(response)){

        try {
            JSONArray allProvinces = new JSONArray(response);
            for (int i = 0;i<allProvinces.length();i++){
                JSONObject provinceObject = allProvinces.getJSONObject(i);
                Province province = new Province();
                province.setProvinceName(provinceObject.getString("name"));
                province.setProvinceCode(provinceObject.getInt("id"));
                province.save();
            }
            return true;
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
    return  false;
}

/**
 * 解析服务器和处理器返回的市级数据
 */

public static boolean handleCityResponse(String response,int provinceId){
    if(!TextUtils.isEmpty(response)){
        try {
            JSONArray allCities = new JSONArray(response);
            for(int i=0;i<allCities.length();i++){
                JSONObject cityObject = allCities.getJSONObject(i);
                City city = new City();
                city.setCityName(cityObject.getString("name"));
                city.setCityCode(cityObject.getInt("id"));
                city.setProvinceId(provinceId);
                city.save();
            }
            return true;
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
    return  false;
}

public static boolean handleCountyResponse(String response, int cityId){
    if(TextUtils.isEmpty(response)){
        try {
            JSONArray allCounties = new JSONArray(response);
            for(int i=0;i<allCounties.length();i++){
                JSONObject countyObject = allCounties.getJSONObject(i);
                County county = new County();
                county.setCountyName(countyObject.getString("name"));
                county.setWeatherId(countyObject.getString("weather_id"));
                county.setCityId(cityId);
                county.save();
            }
            return true;
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
    return false;
}

}

HttpUtil代码 import okhttp3.OkHttpClient; import okhttp3.Request;

public class HttpUtil {

public static void sendOkHttpRequest(String address,okhttp3.Callback callback) {
    OkHttpClient client = new OkHttpClient();
    Request request = new Request.Builder().url(address).build();
    client.newCall(request).enqueue(callback);
}

}

app apply plugin: 'com.android.application'

android { compileSdkVersion 29 buildToolsVersion "29.0.2" defaultConfig { applicationId "com.example.coolweather" minSdkVersion 15 targetSdkVersion 29 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } sourceSets { main { jniLibs.srcDirs = ['libs'] } } }

dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'androidx.appcompat:appcompat:1.0.2' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' implementation 'org.litepal.android:core:1.4.1' implementation 'com.squareup.okhttp3:okhttp:3.4.1' implementation 'com.google.code.gson:gson:2.7' implementation 'com.github.bumptech.glide:glide:3.7.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test:runner:1.2.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' }

debug到这里就动不了