アンドロイドスタジオでの実践的な演習-天気予報プログラム

実用的なドリル天気予報プログラム

(質問がある場合は、コメントして一緒にコミュニケーションすることができ
ます1。プログラムを作成します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
。2。作成が完了したら、ユーザーインターフェイスを設計します。
activity_main.xmlファイルを編集します:(コードは次のとおりです)

<?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. rawフォルダーを作成します(resで作成)
ここに画像の説明を挿入します
。3。rawフォルダーが正常に作成されたら、その中にweather1.xmlファイルを作成します(このファイルには天気に関する情報が含まれています)
weather.xmlコードは次のとおりです。

<?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. WeatherInfoクラスを作成し(weather.xmlの属性をクラスにカプセル化して使用しやすくするため)、WeatherInfoクラスを作成します。具体的なコードは次のとおりです。

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. WeatherServiceツールクラスを作成します(コードを読みやすくするために、1つのクラスで多くのコードを避けるため、XMLファイルを解析するためのツールクラスWeatherServiceを作成します)。
具体的なコードは次のとおりです。

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.インターフェイスインタラクションコードを記述します(MainActivity.javaでは、解析されたweather1.xmlファイルのデータをテキストコントロールに表示する必要があります)。具体的なコードは次のとおりです。

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.実行プログラムは、私が実行しているプログラムは、次のとおりです。
ここに画像の説明を挿入します
要約:
以下は、どのようなIであります実際の戦闘訓練を行いました。
注:写真を作成するときは、いくつかの写真を使用する必要があります。使用する場合は、自分でインターネットを検索して、自分と同じように検索できます。ダウンロードして、Android Studioにコピーして貼り付けます。直接、コピーして貼り付けます。ただし、その際、一部の画像の名前に注意する必要があります。そうしないと、エラーが報告されます。何もわからない場合は、プライベートメッセージやコメントでお互いにコミュニケーションをとることができます。メッセージが表示されたらすぐに返信します。始めたばかりで、一緒に学びます。
ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/Winda_shi/article/details/115026497