package com.liuguilin.lovewallpaper.fragment;
/*
* 项目名: LoveWallpaper
* 包名: com.liuguilin.lovewallpaper.fragment
* 文件名: WeatherFragment
* 创建者: LGL
* 创建时间: 2017/1/10 18:08
* 描述: 天气
*/
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;
import com.liuguilin.lovewallpaper.R;
import com.liuguilin.lovewallpaper.activity.CityActivity;
import com.liuguilin.lovewallpaper.adapter.WeatherGradAdapter;
import com.liuguilin.lovewallpaper.entity.Constants;
import com.liuguilin.lovewallpaper.imp.ApiImp;
import com.liuguilin.lovewallpaper.model.WeatherApiModel;
import com.liuguilin.lovewallpaper.model.WeatherEveryDayApiModel;
import com.liuguilin.lovewallpaper.model.WeatherGridModel;
import com.liuguilin.lovewallpaper.model.WeatherLifeApiModel;
import com.liuguilin.lovewallpaper.utils.L;
import com.liuguilin.lovewallpaper.utils.SharePreUtils;
import java.util.ArrayList;
import java.util.List;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class WeatherFragment extends Fragment implements View.OnClickListener {
private ApiImp apiImp;
private TextView tv_temperature;
private ImageView iv_weather_icon;
private TextView tv_city;
private TextView tv_date;
private GridView mGridViewEveryDay;
private String weatherCity;
private List<WeatherGridModel> mList = new ArrayList<>();
private WeatherGradAdapter adapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_weather, container, false);
initView(view);
return view;
}
private void initView(View view) {
weatherCity = SharePreUtils.getString(getActivity(), "city", "深圳");
mGridViewEveryDay = (GridView) view.findViewById(R.id.mGridViewEveryDay);
adapter = new WeatherGradAdapter(getActivity(), mList);
mGridViewEveryDay.setAdapter(adapter);
tv_temperature = (TextView) view.findViewById(R.id.tv_temperature);
iv_weather_icon = (ImageView) view.findViewById(R.id.iv_weather_icon);
tv_city = (TextView) view.findViewById(R.id.tv_city);
tv_city.setOnClickListener(this);
tv_city.setText(weatherCity);
tv_date = (TextView) view.findViewById(R.id.tv_date);
Retrofit retrofit = new Retrofit.Builder().baseUrl(Constants.WEATHER_BASE_URL)
.addConverterFactory(GsonConverterFactory.create()).build();
apiImp = retrofit.create(ApiImp.class);
//获取天气
getBaseWeather(weatherCity);
}
private void getBaseWeather(String city) {
getWeather(city);
getWeatherLife(city);
}
//获取城市天气
private void getWeather(String city) {
Call<WeatherApiModel> call = apiImp.getWeatherApi(Constants.THINKPAPE_KEY, city);
call.enqueue(new Callback<WeatherApiModel>() {
@Override
public void onResponse(Call<WeatherApiModel> call, Response<WeatherApiModel> response) {
if (response.isSuccessful()) {
tv_temperature.setText(response.body().getResults().get(0).getNow().getTemperature() + "℃"
+ " | " + response.body().getResults().get(0).getNow().getText());
iv_weather_icon.setBackgroundResource(Constants.WEATHER_ICON[Integer.parseInt(response.body().getResults().get(0).getNow().getCode())]);
}
}
@Override
public void onFailure(Call<WeatherApiModel> call, Throwable t) {
}
});
}
//获取未来三天的天气
private void getWeatherEveryDay(String city) {
Call<WeatherEveryDayApiModel> call = apiImp.getWeatherEveryDayApi(Constants.THINKPAPE_KEY, city);
call.enqueue(new Callback<WeatherEveryDayApiModel>() {
@Override
public void onResponse(Call<WeatherEveryDayApiModel> call, Response<WeatherEveryDayApiModel> response) {
if (response.isSuccessful()) {
parsingEveryDay(response.body().getResults());
}
}
@Override
public void onFailure(Call<WeatherEveryDayApiModel> call, Throwable t) {
}
});
}
//获取生活指数
private void getWeatherLife(final String city) {
Call<WeatherLifeApiModel> call = apiImp.getWeatherLifeApi(Constants.THINKPAPE_KEY, city);
call.enqueue(new Callback<WeatherLifeApiModel>() {
@Override
public void onResponse(Call<WeatherLifeApiModel> call, Response<WeatherLifeApiModel> response) {
if (response.isSuccessful()) {
getWeatherEveryDay(city);
parsingLift(response.body().getResults().get(0).getSuggestion());
}
}
@Override
public void onFailure(Call<WeatherLifeApiModel> call, Throwable t) {
}
});
}
//生活指数
private void parsingLift(WeatherLifeApiModel.ResultsBean.SuggestionBean suggestion) {
addListImage("洗车" + suggestion.getCar_washing().getBrief());
addListImage("穿衣" + suggestion.getDressing().getBrief());
addListImage("感冒" + suggestion.getFlu().getBrief());
addListImage("运动" + suggestion.getSport().getBrief());
addListImage("旅游" + suggestion.getTravel().getBrief());
addListImage("紫外线" + suggestion.getUv().getBrief());
}
//未来三天
private void parsingEveryDay(List<WeatherEveryDayApiModel.ResultsBean> results) {
for (int i = 0; i < results.get(0).getDaily().size(); i++) {
String data = results.get(0).getDaily().get(i).getDate();
//设置时间
tv_date.setText(results.get(0).getDaily().get(0).getDate());
String text_day = results.get(0).getDaily().get(i).getText_day();
String text_night = results.get(0).getDaily().get(i).getText_night();
String high = results.get(0).getDaily().get(i).getHigh();
String low = results.get(0).getDaily().get(i).getLow();
String wind_direction = results.get(0).getDaily().get(i).getWind_direction();
String wind_direction_degree = results.get(0).getDaily().get(i).getWind_direction_degree();
String wind_speed = results.get(0).getDaily().get(i).getWind_speed();
String wind_scale = results.get(0).getDaily().get(i).getWind_scale();
addListText(data + "\n" + "白天天气:" + text_day + "\n"
+ "夜间天气:" + text_night + "\n" + "最高温度:" + high + "\n"
+ "最低温度:" + low + "\n" + "风向:" + wind_direction + "\n"
+ "风向角度:" + wind_direction_degree + "\n" + "风速:" + wind_speed + "\n"
+ "风力:" + wind_scale, Integer.parseInt(results.get(0).getDaily().get(i).getCode_day()));
}
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.tv_city:
Intent intent = new Intent(getActivity(), CityActivity.class);
startActivityForResult(intent, Constants.REQUEST_CODE);
break;
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == Constants.REQUEST_CODE) {
try {
String result = data.getStringExtra("city_name");
if (!TextUtils.isEmpty(result)) {
mList.clear();
tv_city.setText(result);
getBaseWeather(result);
}
} catch (NullPointerException e) {
L.i("back key");
}
}
super.onActivityResult(requestCode, resultCode, data);
}
//文字
private void addListText(String text, int code) {
WeatherGridModel models = new WeatherGridModel();
models.setType(WeatherGradAdapter.VALUE_TEXT);
models.setText(text);
models.setCode(code);
mList.add(models);
adapter.notifyDataSetChanged();
}
//图片
private void addListImage(String text) {
WeatherGridModel models = new WeatherGridModel();
models.setType(WeatherGradAdapter.VALUE_IMAGE);
models.setText(text);
mList.add(models);
adapter.notifyDataSetChanged();
}
@Override
public void onDestroy() {
super.onDestroy();
SharePreUtils.putString(getActivity(), "city", tv_city.getText().toString());
}
}