JonsenTang 2021-04-19 13:45 采纳率: 100%
浏览 45
已采纳

Android更新UI问题

//获取当前天气
    public void NowWeatherFill() {
        mHandler = new Handler.Callback() {
            @Override
            public boolean handleMessage(@NonNull Message msg) {

                String NowUrl = Constant.NOW_WEATHER_URL + "location=" + (String) msg.obj + "&key=" + Constant.API_KEY;

                HttpUtils.sendOkHttpRequest(NowUrl, new Callback() {
                    @Override
                    public void onFailure(Call call, IOException e) {
                        ToastUtils.showShortToast(MainActivity.this,"错误");
                    }

                    @Override
                    public void onResponse(Call call, Response response) throws IOException {
                        String responseData = response.body().string();
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                Gson gson = new Gson();
                                NowWeatherBean nowWeatherBean = null;
                                if (responseData != null && !responseData.isEmpty()) {
                                    nowWeatherBean = gson.fromJson(responseData, NowWeatherBean.class);
                                    tvTemperature.setText(nowWeatherBean.getNow().getTemp());//温度

                                    String tempStr = "当前温度:" + nowWeatherBean.getNow().getTemp() + "度,天气" + nowWeatherBean.getNow().getText() + "。";

                                    tvWeek.setText(DateUtils.getWeekOfDate(new Date()));//星期
                                    tvInfo.setText(nowWeatherBean.getNow().getText());//天气状况

                                    String time = DateUtils.updateTime(nowWeatherBean.getUpdateTime());//截去前面的字符,保留后面所有的字符,就剩下 22:00

                                    tvOldTime.setText("最近更新时间:" + WeatherUtil.showTimeInfo(time) + time);
                                    tvWindDirection.setText("风向     " + nowWeatherBean.getNow().getWindDir());//风向
                                    tvWindPower.setText("风力     " + nowWeatherBean.getNow().getWindScale() + "级");//风力
                                    wwBig.startRotate();//大风车开始转动
                                    wwSmall.startRotate();//小风车开始转动
                                }else{
                                    ToastUtils.showShortToast(MainActivity.this,"错误");
                                }
                            }
                        });
                    }
                });
                return false;
            }
        };
    }


    //获取空气质量
    public void AirQualityFill(){
        mHandler = new Handler.Callback() {
            @Override
            public boolean handleMessage(@NonNull Message msg) {

                String NowUrl = Constant.AIRQUALITY_URL + "location=" + (String) msg.obj + "&key=" + Constant.API_KEY;

                HttpUtils.sendOkHttpRequest(NowUrl, new Callback() {
                    @Override
                    public void onFailure(Call call, IOException e) {
                        ToastUtils.showShortToast(MainActivity.this,"错误");
                    }

                    @Override
                    public void onResponse(Call call, Response response) throws IOException {
                        String responseData = response.body().string();
                        runOnUiThread(new Runnable() {

                            @RequiresApi(api = Build.VERSION_CODES.M)
                            @Override
                            public void run() {
                                Gson gson = new Gson();
                                Air_qualityBean air_qualityBean = null;
                                if (responseData != null && !responseData.isEmpty()) {
                                    air_qualityBean = gson.fromJson(responseData, Air_qualityBean.class);
                                    String airStr = "空气质量:" + air_qualityBean.getNow().getAqi() + ",空气" + air_qualityBean.getNow().getCategory() + "。";

                                    rpbAqi.setMaxProgress(300);//最大进度,用于计算
                                    rpbAqi.setMinText("0");//设置显示最小值
                                    rpbAqi.setMinTextSize(32f);
                                    rpbAqi.setMaxText("300");//设置显示最大值
                                    rpbAqi.setMaxTextSize(32f);
                                    rpbAqi.setProgress(Float.valueOf(air_qualityBean.getNow().getAqi()));//当前进度
                                    rpbAqi.setArcBgColor(getColor(R.color.arc_bg_color));//圆弧的颜色
                                    rpbAqi.setProgressColor(getColor(R.color.arc_progress_color));//进度圆弧的颜色
                                    rpbAqi.setFirstText(air_qualityBean.getNow().getCategory());//空气质量描述 取值范围:优,良,轻度污染,中度污染,重度污染,严重污染
                                    rpbAqi.setFirstTextSize(44f);//第一行文本的字体大小
                                    rpbAqi.setSecondText(air_qualityBean.getNow().getAqi());//空气质量值
                                    rpbAqi.setSecondTextSize(64f);//第二行文本的字体大小
                                    rpbAqi.setMinText("0");
                                    rpbAqi.setMinTextColor(getColor(R.color.arc_progress_color));

                                    tvAirInfo.setText("空气" + air_qualityBean.getNow().getCategory());

                                    tvPm10.setText(air_qualityBean.getNow().getPm10());//PM10
                                    tvPm25.setText(air_qualityBean.getNow().getPm2p5());//PM2.5
                                    tvNo2.setText(air_qualityBean.getNow().getNo2());//二氧化氮
                                    tvSo2.setText(air_qualityBean.getNow().getSo2());//二氧化硫
                                    tvO3.setText(air_qualityBean.getNow().getO3());//臭氧
                                    tvCo.setText(air_qualityBean.getNow().getCo());//一氧化碳
                                }else{
                                    ToastUtils.showShortToast(MainActivity.this,"错误");
                                }
                            }
                        });
                    }
                });
                return false;
            }
        };
    }

最近自学Android,尝试做一个天气预报app,写了这两个方法,通过get请求获取数据,直接在

onCreate(Bundle savedInstanceState)方法里执行

但是这两个方法在执行中只执行了一个(谁在前面就执行谁)运行中也没有报错,感觉是不是线程阻塞了

  • 写回答

4条回答 默认 最新

  • Xia_燚 2021-04-19 16:06
    关注

    emm 你把  mHandler 换一个变量名字, 使两个方法的变量不是同名,应该解决了你的问题。

     

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题