Practical exercise in android studio-weather forecast program

Practical drill-weather forecast program

(If you have any questions, you can comment and communicate together)
1. Create the program
Insert picture description here
Insert picture description here
2. After the creation is complete, design the user interface.
Edit the activity_main.xml file: (code is as follows)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/weather02"
    tools:context="com.example.weather.MainActivity">

    <TextView
        android:id="@+id/tv_city"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignEnd="@+id/tv_weather"
        android:layout_alignParentTop="true"
        android:layout_alignRight="@+id/tv_weather"
        android:layout_marginTop="39dp"
        android:text="上海"
        android:textSize="50sp"/>
    <ImageView
        android:id="@+id/iv_icon"
        android:layout_width="70dp"
        android:layout_height="70dp"
        android:layout_alignLeft="@+id/ll_btn"
        android:layout_alignStart="@+id/ll_btn"
        android:layout_below="@+id/tv_city"
        android:layout_marginLeft="44dp"
        android:layout_marginStart="44dp"
        android:layout_marginTop="42dp"
        android:paddingBottom="5dp"
        android:src="@mipmap/ic_launcher" />
    <TextView
        android:id="@+id/tv_weather"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/iv_icon"
        android:layout_below="@+id/iv_icon"
        android:layout_marginRight="15dp"
        android:layout_marginTop="18dp"
        android:gravity="center"
        android:text="多云"
        android:textSize="18sp"/>
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/iv_icon"
        android:layout_marginLeft="39dp"
        android:layout_marginStart="39dp"
        android:layout_toEndOf="@+id/iv_icon"
        android:layout_toRightOf="@+id/iv_icon"
        android:gravity="center"
        android:orientation="vertical">
        <TextView
            android:id="@+id/tv_temp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:gravity="center_vertical"
            android:text="- 7 ℃"
            android:textSize="22sp" />
        <TextView
            android:id="@+id/tv_wind"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="风力:3级"
            android:textSize="18sp" />
        <TextView
            android:id="@+id/tv_pm"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="pm"
            android:textSize="18sp"/>
    </LinearLayout>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/cardview_compat_inset_shadow"
        android:text="石周斗专属"/>
    <LinearLayout
        android:id="@+id/ll_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:orientation="horizontal">
        <Button
            android:id="@+id/btn_bj"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="北京"/>
        <Button
            android:id="@+id/btn_sh"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="上海"/>
        <Button
            android:id="@+id/btn_gz"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="广州"/>

    </LinearLayout>
</RelativeLayout>

2. Create a folder raw (created in res)
Insert picture description here
3. After the raw folder is created successfully, create a weather1.xml file in it (this file contains some weather information) The
weather.xml code is as follows:

<?xml version="1.0" encoding="utf-8"?>
<infos>
    <city id="sh">
        <temp>20`C/30`C</temp>
        <weather>晴转多云</weather>
        <name>上海</name>
        <pm>80</pm>
        <wind>1级</wind>
    </city>
    <city id="bj">
        <temp>26`C/32`C</temp>
        <weather>晴</weather>
        <name>北京</name>
        <pm>98</pm>
        <wind>3级</wind>
    </city>
    <city id="gz">
        <temp>15`C/24`C</temp>
        <weather>多云</weather>
        <name>广州</name>
        <pm>30</pm>
        <wind>5级</wind>
    </city>
</infos>

4. Create the WeatherInfo class (in order to facilitate the use of the attributes in weather.xml, encapsulated into a class), create the WeatherInfo class, the specific code is as follows:

package com.example.weather;

public class WeatherInfo {
    private String id;
    private String temp;
    private String weather;
    private String name;
    private String pm;
    private String wind;
    public String getId(){
        return id;
    }
    public void setId(String id){
        this.id=id;
    }
    public String getTemp(){
        return temp;
    }
    public void setTemp(String temp){
        this.temp=temp;
    }
    public String getWeather(){
       return weather;
    }
    public void setWeather(String weather){
        this.weather=weather;
    }
    public String getName(){
        return name;
    }
    public void setName(String name){
        this.name=name;
    }
    public String getPm(){
        return pm;
    }
    public void setPm(String pm){
        this.pm=pm;
    }
    public String getWind(){
        return wind;
    }
    public void setWind(String wind){
        this.wind=wind;
    }
}

5. Create a WeatherService tool class (in order to make the code easier to read, avoid a lot of code in one class, so create a tool class WeatherService for parsing XML files).
The specific code is as follows:

package com.example.weather;
import android.util.Xml;
import org.xmlpull.v1.XmlPullParser;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class WeatherService {
    public static List<WeatherInfo> getInfsFromXML (InputStream is) throws Exception{
        XmlPullParser parser= Xml.newPullParser();
        parser.setInput(is,"utf-8");
        List<WeatherInfo> weatherInfos=null;
        WeatherInfo weatherInfo =null;
        int type =parser.getEventType();
        while (type != XmlPullParser.END_DOCUMENT){
            switch (type){
                case XmlPullParser.START_TAG:
                    if ("infos".equals(parser.getName())){
                        weatherInfos= new ArrayList<WeatherInfo>();
                    }else if ("city".equals(parser.getName())){
                        weatherInfo =new WeatherInfo();
                        String idStr =parser.getAttributeValue(0);
                        weatherInfo.setId(idStr);
                    }else if ("temp".equals(parser.getName())){
                        String temp=parser.nextText();
                        weatherInfo.setTemp(temp);
                    }else if ("weather".equals(parser.getName())){
                        String weather =parser.nextText();
                        weatherInfo.setWeather(weather);
                    }else if ("name".equals(parser.getName())){
                        String name =parser.nextText();
                        weatherInfo.setName(name);
                    }else if ("pm".equals(parser.getName())){
                        String pm=parser.nextText();
                        weatherInfo.setPm(pm);
                    }else if ("wind".equals(parser.getName())){
                        String wind =parser.nextText();
                        weatherInfo.setWind(wind);
                    }
                    break;
                case XmlPullParser.END_TAG:
                    if ("city".equals(parser.getName())){
                        weatherInfos.add(weatherInfo);
                        weatherInfo=null;
                    }
                    break;
            }
            type=parser.next();
        }
        return weatherInfos;
    }
}

6. Write interface interaction code (In MainActivity.java, the data in the parsed weather1.xml file needs to be displayed in the text control). The specific code is as follows:

package com.example.weather;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    private TextView tvCity;
    private TextView tvWeather;
    private TextView tvTemp;
    private TextView tvWind;
    private TextView tvpm;
    private ImageView ivIcon;
    private Map<String,String> map;
    private List<Map<String,String>> list;
    private String temp,weather,name,pm,wind;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        intView();
        try {
            InputStream is=this.getResources().openRawResource(R.raw.weather1);
            List<WeatherInfo> weatherInfos=WeatherService.getInfsFromXML(is);
            list =new ArrayList<Map<String,String>>();
            for (WeatherInfo info:weatherInfos){
                map=new HashMap<String, String>();
                map.put("temp",info.getTemp());
                map.put("weather",info.getWeather());
                map.put("name",info.getName());
                map.put("pm",info.getPm());
                map.put("wind",info.getWind());
                list.add(map);
            }
        } catch (Exception e){
            e.printStackTrace();
            Toast.makeText(this,"解析信息失败",Toast.LENGTH_SHORT).show();
        }
        getMap(1,R.drawable.sun);
    }
    private void intView(){
        tvCity =(TextView) findViewById(R.id.tv_city);
        tvWeather=(TextView) findViewById(R.id.tv_weather);
        tvTemp=(TextView) findViewById(R.id.tv_temp);
        tvWind=(TextView) findViewById(R.id.tv_wind);
        tvpm=(TextView) findViewById(R.id.tv_pm);
        ivIcon =(ImageView) findViewById(R.id.iv_icon);
        findViewById(R.id.btn_sh).setOnClickListener(this);
        findViewById(R.id.btn_gz).setOnClickListener(this);
        findViewById(R.id.btn_bj).setOnClickListener(this);
    }
    public void onClick(View v){
        switch (v.getId()){
            case R.id.btn_sh:
                getMap(0,R.drawable.cloud_sun1);
                break;
            case R.id.btn_bj:
                getMap(1,R.drawable.sun);
                break;
            case R.id.btn_gz:
                getMap(2,R.drawable.clouds);
                break;
        }
    }
    private void getMap(int number,int iconNumber){
        Map<String,String> cityMap=list.get(number);
        temp=cityMap.get("temp");
        weather=cityMap.get("weather");
        name=cityMap.get("name");
        pm=cityMap.get("pm");
        wind=cityMap.get("wind");
        tvCity.setText(name);
        tvWeather.setText(weather);
        tvTemp.setText(""+temp);
        tvWind.setText("风力:"+wind);
        tvpm.setText("pm:"+pm);
        ivIcon.setImageResource(iconNumber);
    }
}

7. Run the program (when running the program, the single "Beijing", "Shanghai", and "Guangzhou" buttons can display weather information of different cities), the running program I did is as follows:
Insert picture description here
Summary:
The following is what I did Actual combat drills.
Note: We need to use some pictures when we make them. If we do, we can search the internet by ourselves and just like it ourselves. Download it, then copy and paste it into our Android studio, just copy and paste it directly. But when we do it, we must pay attention to the naming of some pictures, otherwise an error will be reported. If you don’t understand anything, you can communicate with each other, private message or comment, I will reply in time when I see the message, I am just starting out, and learn together!
Insert picture description here

Guess you like

Origin blog.csdn.net/Winda_shi/article/details/115026497