Guest User

Untitled

a guest
Jul 1st, 2016
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.01 KB | None | 0 0
  1. public static MainFragment newInstance() {
  2. return new MainFragment();
  3. }
  4.  
  5. @Override
  6. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  7. Bundle savedInstanceState) {
  8. View rootView = inflater.inflate(R.layout.fragment_main, container, false);
  9. weatherList = new ArrayList<>();
  10. recyclerView = (RecyclerView) rootView.findViewById(R.id.list);
  11. swipeRefreshLayout = (SwipeRefreshLayout) rootView.findViewById(R.id.swipe_refresh_layout);
  12. recyclerView.setHasFixedSize(true);
  13. recyclerView.setLayoutManager(
  14. new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false));
  15. cityListAdapter = new CityListAdapter(getActivity(), weatherList);
  16. recyclerView.setAdapter(cityListAdapter);
  17. swipeRefreshLayout.setOnRefreshListener(this);
  18. swipeRefreshLayout.post(new Runnable() {
  19. @Override
  20. public void run() {
  21. swipeRefreshLayout.setRefreshing(true);
  22. getCityTemp();
  23. }
  24. });
  25. return rootView;
  26. }
  27.  
  28. @Override
  29. public void onRefresh() {
  30. swipeRefreshLayout.setRefreshing(true);
  31. getCityTemp();
  32. }
  33.  
  34. private void getCityTemp() {
  35. weatherList.clear();
  36. swipeRefreshLayout.setRefreshing(true);
  37. MyApplication.getInstance().getDb().getAllCityAsync(new DataBaseHelper.DatabaseHand<List<Weather>>() {
  38. @Override
  39. public void onComplete(boolean success, final List<Weather> result) {
  40. if (success) {
  41. for (final Weather cn : result) {
  42. String url = CITY_TEMP_URL + cn.location.getCity() + LANG + METRIC + API_KEY;
  43. JsonObjectRequest request = new JsonObjectRequest(url, null,
  44. new Response.Listener<JSONObject>() {
  45. @Override
  46. public void onResponse(JSONObject jsonObject) {
  47. try {
  48. MyApplication.getInstance().setWeather(
  49. JSONWeatherParser.getWeather(jsonObject.toString(), cn.getCityID()));
  50. weatherList.add(MyApplication.getInstance().getWeather());
  51. cityListAdapter.notifyDataSetChanged();
  52. } catch (JSONException e) {
  53. e.printStackTrace();
  54. }
  55. }
  56. }, new Response.ErrorListener() {
  57. @Override
  58. public void onErrorResponse(VolleyError volleyError) {
  59. }
  60. });
  61. MyApplication.getInstance().addToRequestQueue(request);
  62. }
  63. }
  64. MyApplication.getInstance().getDb().close();
  65. }
  66. });
  67. swipeRefreshLayout.setRefreshing(false);
  68. }
  69.  
  70. @Override
  71. public void onPause() {
  72. super.onPause();
  73. saveData();
  74. }
  75.  
  76. private void read() {
  77. MyApplication.getInstance().getDb().getAllCityAsync(new DataBaseHelper.DatabaseHand<List<Weather>>() {
  78. @Override
  79. public void onComplete(boolean success, List<Weather> result) {
  80. if (success) {
  81. for (Weather cn : result) {
  82. String log =
  83. "Id: " + cn.getCityID() + "n" +
  84. " , name_city: " + cn.location.getCity() + "n" +
  85. " , lon: " + cn.location.getLongitude() + "n" +
  86. " , lat: " + cn.location.getLatitude() + "n" +
  87. " , country: " + cn.location.getCountry() + "n" +
  88. " , sunrise: " + cn.location.getSunrise() + "n" +
  89. " , sunset: " + cn.location.getSunset() + "n" +
  90. " , weather_id: " + cn.currentCondition.getWeatherId() + "n" +
  91. " , description: " + cn.currentCondition.getDescr() + "n" +
  92. " , main: " + cn.currentCondition.getCondition() + "n" +
  93. " , icon: " + cn.currentCondition.getIcon() + "n" +
  94. " , humidity: " + cn.currentCondition.getHumidity() + "n" +
  95. " , pressure: " + cn.currentCondition.getPressure() + "n" +
  96. " , temp_max: " + cn.temperature.getMaxTemp() + "n" +
  97. " , temp_min: " + cn.temperature.getMinTemp() + "n" +
  98. " , speed: " + cn.wind.getSpeed() + "n" +
  99. " , deg: " + cn.wind.getDeg() + "n" +
  100. " , all: " + cn.clouds.getPerc() + "n" +
  101. " , icon_array: " + Arrays.toString(cn.getIconArray()) + "n";
  102. Log.d("TAG", log);
  103. }
  104. }
  105. MyApplication.getInstance().getDb().close();
  106. }
  107. });
  108. }
  109.  
  110. public void saveData() {
  111. for (Weather weather : weatherList) {
  112. MyApplication.getInstance().getDb().updateCityAsync(weather,
  113. new DataBaseHelper.DatabaseHand<Integer>() {
  114. @Override
  115. public void onComplete(boolean success, Integer result) {
  116. if (success) {
  117.  
  118. }
  119. }
  120. });
  121. }
  122. read();
  123. }
  124.  
  125. public class CityListAdapter extends RecyclerView.Adapter<CityListAdapter.ViewHolder> {
  126.  
  127. private List<Weather> data;
  128. Context context;
  129.  
  130. public CityListAdapter(Context context, List<Weather> data) {
  131. this.context = context;
  132. this.data = data;
  133. }
  134.  
  135. @Override
  136. public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  137. View itemView = LayoutInflater.from(parent.getContext())
  138. .inflate(R.layout.custom_list_item, parent, false);
  139. return new ViewHolder(itemView);
  140. }
  141.  
  142. @Override
  143. public void onBindViewHolder(ViewHolder holder, int position) {
  144. Weather weather = data.get(position);
  145. holder.name_city.setText(weather.location.getCity());
  146. holder.name_city.setTag(weather.getCityID());
  147. holder.temperature_city.setText(MessageFormat.format("{0}℃",
  148. Math.round(weather.temperature.getTemp())));
  149. }
  150.  
  151. @Override
  152. public int getItemCount() {
  153. return data.size();
  154. }
  155.  
  156. class ViewHolder extends RecyclerView.ViewHolder
  157. implements View.OnClickListener {
  158. private TextView name_city, temperature_city;
  159.  
  160. public ViewHolder(View itemView) {
  161. super(itemView);
  162. name_city = (TextView) itemView.findViewById(R.id.name_city);
  163. temperature_city = (TextView) itemView.findViewById(R.id.temperature_city);
  164. name_city.setOnClickListener(this);
  165. }
  166.  
  167. @Override
  168. public void onClick(View v) {
  169. Integer pos = (int) (long) v.getTag();
  170. read(pos);
  171. }
  172. }
  173.  
  174. public void nextFragment() {
  175. FragmentManager manager = ((AppCompatActivity) context).getSupportFragmentManager();
  176. FragmentTransaction ft = manager.beginTransaction();
  177. ft.replace(R.id.container, new DetailFragment());
  178. ft.addToBackStack("detail");
  179. ft.commit();
  180. }
  181.  
  182. private void read(long pos) {
  183. MyApplication.getInstance().getDb().getCityAsync(pos, new DataBaseHelper.DatabaseHand<Weather>() {
  184. @Override
  185. public void onComplete(boolean success, Weather result) {
  186. if (success) {
  187. MyApplication.getInstance().setWeather(result);
  188. nextFragment();
  189. }
  190. MyApplication.getInstance().getDb().close();
  191. }
  192. });
  193. }
  194.  
  195. @Override
  196. public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  197. View v = inflater.inflate(
  198. R.layout.detail_fragment, container, false);
  199. init(v);
  200. setDataView();
  201. return v;
  202. }
  203.  
  204. public void setDataView() {
  205. tvLocation.setText(String.format("%s,%s", getInstance().getWeather().location.getCity(),
  206. getInstance().getWeather().location.getCountry()));
  207. tvTemperature.setText(String.valueOf(Math.round(getInstance().getWeather().temperature.getTemp())));
  208. tvTempMin.setText(String.valueOf(Math.round(getInstance().getWeather().temperature.getMinTemp())));
  209. tvTempMax.setText(String.valueOf(Math.round(getInstance().getWeather().temperature.getMaxTemp())));
  210. tvWindSpeed.setText(String.valueOf(Math.round(getInstance().getWeather().wind.getSpeed())));
  211. tvWindDeg.setText(String.valueOf(Math.round(getInstance().getWeather().wind.getDeg())));
  212. tvHum.setText(String.valueOf(Math.round(getInstance().getWeather().currentCondition.getHumidity())));
  213. tvPress.setText(String.valueOf(Math.round(getInstance().getWeather().currentCondition.getPressure())));
  214. tvSunrise.setText(convertTime(getInstance().getWeather().location.getSunrise()));
  215. tvSunset.setText(convertTime(getInstance().getWeather().location.getSunset()));
  216. int resId = getResource(getInstance().getWeather().temperature.getTemp());
  217. lineTxt.setBackgroundResource(resId);
  218. tvTempUnit.setText("°C");
  219. tvDescrWeather.setText(getInstance().getWeather().currentCondition.getDescr());
  220. }
  221.  
  222. public void init(View v) {
  223. requestQueue = Volley.newRequestQueue(getActivity().getApplicationContext());
  224. tvDescrWeather = (TextView) v.findViewById(R.id.descrWeather);
  225. lineTxt = (TextView) v.findViewById(R.id.lineTxt);
  226. tvLocation = (TextView) v.findViewById(R.id.location);
  227. tvTemperature = (TextView) v.findViewById(R.id.temp);
  228. tvTempUnit = (TextView) v.findViewById(R.id.tempUnit);
  229. tvTempMin = (TextView) v.findViewById(R.id.tempMin);
  230. tvTempMax = (TextView) v.findViewById(R.id.tempMax);
  231. tvHum = (TextView) v.findViewById(R.id.humidity);
  232. tvWindSpeed = (TextView) v.findViewById(R.id.windSpeed);
  233. tvWindDeg = (TextView) v.findViewById(R.id.windDeg);
  234. tvPress = (TextView) v.findViewById(R.id.pressure);
  235. weatherImage = (ImageView) v.findViewById(R.id.imgWeather);
  236. tvSunrise = (TextView) v.findViewById(R.id.sunrise);
  237. tvSunset = (TextView) v.findViewById(R.id.sunset);
  238. }
  239.  
  240. public String convertTime(long time) {
  241. long javaTimestamp = time * 1000L;
  242. Date date = new Date(javaTimestamp);
  243. return new SimpleDateFormat("hh:mm", Locale.ENGLISH).format(date);
  244. }
  245.  
  246. private int getResource(float temp) {
  247. int resId = 0;
  248. if (temp < 10)
  249. resId = R.drawable.line_shape_blue;
  250. else if (temp >= 10 && temp <= 24)
  251. resId = R.drawable.line_shape_green;
  252. else if (temp > 25)
  253. resId = R.drawable.line_shape_red;
  254. return resId;
  255. }
  256.  
  257. public class MyApplication extends Application {
  258.  
  259. public static final String TAG = MyApplication.class
  260. .getSimpleName();
  261. private Weather weather;
  262. private DataBaseHelper db;
  263.  
  264. private RequestQueue mRequestQueue;
  265. private static MyApplication mInstance;
  266. RequestQueue.RequestFinishedListener requestFinishedListener;
  267.  
  268. @Override
  269. public void onCreate() {
  270. super.onCreate();
  271. mInstance = this;
  272. db = new DataBaseHelper(this);
  273. weather = new Weather();
  274. }
  275.  
  276. public static synchronized MyApplication getInstance() {
  277. return mInstance;
  278. }
Add Comment
Please, Sign In to add comment