warren_young 2019-08-14 11:31 采纳率: 0%
浏览 561

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

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 adapter;

private List dataList = new ArrayList<>();

/**

  • 省列表 */

private List provinceList;

/**

  • 市列表 */

private List cityList;

/**

  • 县列表 */ private ListcountyList;

/**

  • 选中的省份 */ 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到这里就动不了图片说明

  • 写回答

1条回答 默认 最新

  • zqbnqsdsmd 2019-08-15 10:36
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler