Android天气预报项目

1、项目效果图:

2、主页面MainActivity代码如下:

MainActivity.java

package com.qianfeng.weather;

import android.content.Intent;
import android.graphics.drawable.AnimationDrawable;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import org.json.JSONObject;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private ImageView refreshIv;
    private ImageView searchIv;
    private TextView cityTv;
    private TextView pmTv;
    private TextView errorTv;
    private TextView tempTv;
    private TextView weatherTv;
    private TextView windTv;
    private TextView dateTv;
    private View lineView;
    private LinearLayout otherLl;

    private List<String> weekList;
    private Handler handler;

    private int code = 101100101;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        initData();
        getData(code);
        setListener();
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 100) {
            code = resultCode;
            getData(code);
        }
    }

    private void setListener() {
        refreshIv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                getData(code);
            }
        });
        searchIv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this,
                        SearchActivity.class);
                startActivityForResult(intent, 100);
            }
        });
    }

    /**
     *
     */
    private void initData() {
//        在Android中借助handler类实现从服务器获取数据后更新UI页面(Handler原理)
        handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                if (msg.what == 200) {
                    errorTv.setText((String) msg.obj);
                }
                if (msg.what == 100) {
                    errorTv.setText("");
//                    停止转圈动画
                    refreshIv.setBackgroundResource(R.mipmap.refresh);
                    List<WeatherBean> list = (List<WeatherBean>) msg.obj;
                    cityTv.setText(list.get(0).getCity());
                    pmTv.setText(list.get(0).getPm());
                    tempTv.setText(list.get(0).getTempCurrent());
                    weatherTv.setText(list.get(0).getWeather() + " " + list.get(0).getTemp());
                    windTv.setText(list.get(0).getWindCurrent());
                    dateTv.setText(list.get(0).getDate_y() + " " + list.get(0).getWeek());
                    if (list.get(0).getPm().substring(list.get(0).getPm().lastIndexOf(" ") + 1).equals("优")) {
                        lineView.setBackgroundColor(getResources().getColor(R.color.pm1));
                    } else if (list.get(0).getPm().substring(list.get(0).getPm().lastIndexOf(" ") + 1).equals("良")) {
                        lineView.setBackgroundColor(getResources().getColor(R.color.pm2));
                    } else if (list.get(0).getPm().substring(list.get(0).getPm().lastIndexOf(" ") + 1).equals("轻度污染")) {
                        lineView.setBackgroundColor(getResources().getColor(R.color.pm3));
                    } else if (list.get(0).getPm().substring(list.get(0).getPm().lastIndexOf(" ") + 1).equals("中度")) {
                        lineView.setBackgroundColor(getResources().getColor(R.color.pm4));
                    } else if (list.get(0).getPm().substring(list.get(0).getPm().lastIndexOf(" ") + 1).equals("重度")) {
                        lineView.setBackgroundColor(getResources().getColor(R.color.pm5));
                    } else if (list.get(0).getPm().substring(list.get(0).getPm().lastIndexOf(" ") + 1).equals("严重")) {
                        lineView.setBackgroundColor(getResources().getColor(R.color.pm6));
                    }
//                    清空水平滚动条的孙子辈视图
                    otherLl.removeAllViews();
//                    将未来五天的天气信息动态设置到水平滚动条中的线性布局中的子视图中
                    for (int i = 1; i < list.size(); i++) {
                        View view = LayoutInflater.from(getApplicationContext()).inflate(R.layout.item, null);
                        TextView weekItemTv = (TextView) view.findViewById(R.id.tv_week_item);
                        TextView weatherItemTv = (TextView) view.findViewById(R.id.tv_weather_item);
                        TextView tempItemTv = (TextView) view.findViewById(R.id.tv_temp_item);
                        weekItemTv.setText(list.get(i).getWeek());
       
  • 26
    点赞
  • 190
    收藏
    觉得还不错? 一键收藏
  • 32
    评论
好的,下面是创建一个简单的天气预报应用程序的步骤: 1. 首先,在Android Studio中创建一个新的项目,选择空活动模板。 2. 在项目中添加必要的依赖项和权限。您需要添加以下依赖项: ``` implementation 'com.android.volley:volley:1.1.1' implementation 'com.squareup.picasso:picasso:2.71828' ``` 以及以下权限: ``` <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> ``` 3. 在布局文件中添加必要的组件。您需要添加一个EditText,一个Button,一个TextView和一个ImageView。 4. 创建一个Java类来处理API请求和JSON响应。您可以使用Volley库来处理API请求和Gson库来解析JSON响应。您还需要添加以下代码来处理响应: ```java private void parseWeatherResponse(JSONObject response) { try { JSONObject main = response.getJSONObject("main"); JSONArray weatherArray = response.getJSONArray("weather"); JSONObject weather = weatherArray.getJSONObject(0); String temp = main.getString("temp") + "°C"; String description = weather.getString("description"); String iconUrl = "http://openweathermap.org/img/w/" + weather.getString("icon") + ".png"; temperature.setText(temp); weatherDescription.setText(description); Picasso.get().load(iconUrl).into(weatherIcon); } catch (JSONException e) { e.printStackTrace(); } } ``` 5. 在活动中,将EditText和Button与Java类中的相应组件绑定,并在Button的单击事件中调用API请求。 ```java String url = "http://api.openweathermap.org/data/2.5/weather?q=" + city + "&units=metric&appid=" + API_KEY; JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { parseWeatherResponse(response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { error.printStackTrace(); } } ); queue.add(request); ``` 6. 运行应用程序并输入城市名称,即可显示天气预报信息。 希望这些步骤能帮助您创建一个简单的天气预报应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值