Advertisement
Guest User

Untitled

a guest
Mar 29th, 2015
239
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.46 KB | None | 0 0
  1. package synctc.me.stormy;
  2.  
  3. import android.app.AlertDialog;
  4. import android.app.DownloadManager;
  5. import android.content.Context;
  6. import android.graphics.drawable.Drawable;
  7. import android.net.ConnectivityManager;
  8. import android.net.NetworkInfo;
  9. import android.support.v7.app.ActionBarActivity;
  10. import android.os.Bundle;
  11. import android.util.Log;
  12. import android.view.Menu;
  13. import android.view.MenuItem;
  14. import android.view.View;
  15. import android.widget.ImageView;
  16. import android.widget.ProgressBar;
  17. import android.widget.RelativeLayout;
  18. import android.widget.TextView;
  19. import android.widget.Toast;
  20.  
  21.  
  22. import com.squareup.okhttp.Call;
  23. import com.squareup.okhttp.Callback;
  24. import com.squareup.okhttp.OkHttpClient;
  25. import com.squareup.okhttp.Request;
  26. import com.squareup.okhttp.Response;
  27.  
  28. import org.json.JSONException;
  29. import org.json.JSONObject;
  30.  
  31. import java.io.IOException;
  32.  
  33. import butterknife.ButterKnife;
  34. import butterknife.InjectView;
  35.  
  36.  
  37. public class MainActivity extends ActionBarActivity {
  38. public static final String TAG = MainActivity.class.getSimpleName();
  39. private CurrentWeather mCurrentWeather ;
  40.  
  41.  
  42. @InjectView(R.id.timeLabel) TextView mTimeLabel;
  43. @InjectView(R.id.temperatureLabel) TextView mTemperatureLabel;
  44. @InjectView(R.id.humidityValue) TextView mHumidityValue;
  45. @InjectView(R.id.precipValue) TextView mPrecipValue;
  46. @InjectView(R.id.summaryLabel) RelativeLayout mSummaryLabel;
  47. @InjectView(R.id.iconImageView) ImageView mIconImageView;
  48. @InjectView(R.id.refreshImageView) ImageView mRefreshImageView;
  49. @InjectView(R.id.progressBar)ProgressBar mProgressBar;
  50.  
  51.  
  52. @Override
  53. protected void onCreate(Bundle savedInstanceState) {
  54. super.onCreate(savedInstanceState);
  55. setContentView(R.layout.activity_main);
  56. ButterKnife.inject(this);
  57. mProgressBar.setVisibility(View.INVISIBLE);
  58. final double latitude = 37.8267;
  59. final double longitude = -122.423;
  60. mRefreshImageView.setOnClickListener(new View.OnClickListener() {
  61. @Override
  62. public void onClick(View v) {
  63. getForecast(latitude,longitude);
  64. }
  65. });
  66.  
  67.  
  68. getForecast(latitude,longitude);
  69.  
  70. Log.d(TAG, "Main ui is running");
  71. }
  72.  
  73. private void getForecast(double latitude, double longitude) {
  74. String apiKey="37ee485ed1ec27026ef5ff8948b6f94b";
  75. String forecastUrl="https://api.forecast.io/forecast/"+apiKey+"/"+latitude+","+longitude;
  76. if(isNetworkAvailable()){
  77. OkHttpClient client = new OkHttpClient();
  78. Request request = new Request.Builder()
  79. .url(forecastUrl)
  80. .build();
  81. Call call=client.newCall(request);
  82. call.enqueue(new Callback() {
  83. @Override
  84. public void onFailure(Request request, IOException e) {
  85. runOnUiThread(new Runnable() {
  86. @Override
  87. public void run() {
  88. toggleRefresh();
  89. }
  90. });
  91. alertUserAboutError();
  92. }
  93.  
  94. @Override
  95. public void onResponse(Response response) throws IOException {
  96. runOnUiThread(new Runnable() {
  97. @Override
  98. public void run() {
  99. toggleRefresh();
  100. }
  101. });
  102. try {
  103. String jsonData = response.body().string();
  104. Log.v(TAG, jsonData);
  105. if(response.isSuccessful()){
  106. mCurrentWeather = getCurrentDetails(jsonData);
  107. runOnUiThread(new Runnable() {
  108. @Override
  109. public void run() {
  110. updateDisplay();
  111. }
  112. });
  113.  
  114. }else{
  115. alertUserAboutError();
  116. }
  117. } catch (IOException e) {
  118. Log.e(TAG, "Exception Caught : ",e);
  119.  
  120. }
  121. catch (JSONException e){
  122.  
  123. Log.e(TAG, "Exception Caught : ",e);
  124. }
  125.  
  126. }
  127. });}
  128. else{
  129. Toast.makeText(this
  130. , getString(R.string.network_unavailable_messege)
  131. , Toast.LENGTH_LONG).show();
  132.  
  133. }
  134. }
  135.  
  136.  
  137. private void updateDisplay() {
  138. mTemperatureLabel.setText(mCurrentWeather.getTemperature()+"");
  139. mTimeLabel.setText("At" +mCurrentWeather.getFormattedTime()+"it will be ");
  140. mHumidityValue.setText(mCurrentWeather.getHumidity()+"");
  141. mPrecipValue.setText(mCurrentWeather.getPrecipChane()+"%");
  142.  
  143. Drawable drawable = getResources().getDrawable(mCurrentWeather.getIconId());
  144. mIconImageView.setImageDrawable(drawable);
  145.  
  146.  
  147. }
  148.  
  149. private CurrentWeather getCurrentDetails(String jsonData) throws JSONException{
  150. JSONObject forecast = new JSONObject (jsonData);
  151. String timezone = forecast.getString("timezone");
  152. Log.i(TAG,"From JSON To:"+timezone);
  153. JSONObject currently = new JSONObject("currently");
  154. CurrentWeather currentWeather = new CurrentWeather();
  155. currentWeather.setHumidity(currently.getDouble("humidity"));
  156. currentWeather.setTime(currently.getLong("time"));
  157. currentWeather.setIcon(currently.getString("icon"));
  158. currentWeather.setPrecipChane(currently.getDouble("precipProbability"));
  159. currentWeather.setSummery(currently.getString("summery"));
  160. currentWeather.setTemperature(currently.getDouble("temperature"));
  161. currentWeather.setTimeZone(timezone);
  162. Log.d(TAG, currentWeather.getFormattedTime());
  163. return currentWeather;
  164. }
  165.  
  166. private boolean isNetworkAvailable() {
  167.  
  168. toggleRefresh();
  169.  
  170.  
  171. ConnectivityManager manager = (ConnectivityManager)
  172. getSystemService(Context.CONNECTIVITY_SERVICE);
  173. NetworkInfo networkInfo = manager.getActiveNetworkInfo();
  174. boolean isAvailable = false;
  175. if(networkInfo != null &&networkInfo.isConnected()){
  176. isAvailable=true ;
  177.  
  178. }
  179. return isAvailable;
  180.  
  181. }
  182.  
  183. private void toggleRefresh() {
  184. if(mProgressBar.getVisibility()== View.INVISIBLE) {
  185. mProgressBar.setVisibility(View.VISIBLE);
  186. mRefreshImageView.setVisibility(View.INVISIBLE);
  187. }else{
  188. mProgressBar.setVisibility(View.INVISIBLE);
  189. mRefreshImageView.setVisibility(View.VISIBLE);
  190.  
  191. }
  192. }
  193.  
  194. private void alertUserAboutError() {
  195. AlertDialogFragment dialog = new AlertDialogFragment();
  196. dialog.show(getFragmentManager(), "error_dialog");
  197.  
  198. }
  199. }
  200.  
  201. package synctc.me.stormy;
  202.  
  203. import android.app.AlertDialog;
  204. import android.app.Dialog;
  205. import android.app.DialogFragment;
  206. import android.content.Context;
  207. import android.os.Bundle;
  208.  
  209.  
  210. public class AlertDialogFragment extends DialogFragment {
  211. @Override
  212. public Dialog onCreateDialog(Bundle savedInstanceState) {
  213. Context context = getActivity();
  214.  
  215. AlertDialog.Builder builder = new AlertDialog.Builder(context)
  216. .setTitle(context.getString(R.string.error_title))
  217. .setMessage(context.getString(R.string.error_messege))
  218. .setPositiveButton(context.getString(R.string.error_ok_button_text), null);
  219. AlertDialog dialog = builder.create();
  220. return dialog;
  221. }
  222. }
  223.  
  224. package synctc.me.stormy;
  225.  
  226. import java.text.SimpleDateFormat;
  227. import java.util.Date;
  228. import java.util.TimeZone;
  229.  
  230. public class CurrentWeather {
  231. private String mIcon;
  232. private long mTime;
  233. private double mTemperature;
  234. private double mHumidity;
  235.  
  236. public String getTimeZone() {
  237. return mTimeZone;
  238. }
  239.  
  240. public void setTimeZone(String timeZone) {
  241. mTimeZone = timeZone;
  242. }
  243.  
  244. private double mPrecipChane;
  245. private String mSummery;
  246. private String mTimeZone;
  247.  
  248. public String getIcon() {
  249. return mIcon;
  250. }
  251.  
  252. public void setIcon(String icon) {
  253. mIcon = icon;
  254. }
  255. public int getIconId(){
  256. int iconId = R.mipmap.clear_day;
  257. if (mIcon.equals("clear-day")) {
  258. iconId = R.mipmap.clear_day;
  259. }
  260. else if (mIcon.equals("clear-night")) {
  261. iconId = R.mipmap.clear_night;
  262. }
  263. else if (mIcon.equals("rain")) {
  264. iconId = R.mipmap.rain;
  265. }
  266. else if (mIcon.equals("snow")) {
  267. iconId = R.mipmap.snow;
  268. }
  269. else if (mIcon.equals("sleet")) {
  270. iconId = R.mipmap.sleet;
  271. }
  272. else if (mIcon.equals("wind")) {
  273. iconId = R.mipmap.wind;
  274. }
  275. else if (mIcon.equals("fog")) {
  276. iconId = R.mipmap.fog;
  277. }
  278. else if (mIcon.equals("cloudy")) {
  279. iconId = R.mipmap.cloudy;
  280. }
  281. else if (mIcon.equals("partly-cloudy-day")) {
  282. iconId = R.mipmap.partly_cloudy;
  283. }
  284. else if (mIcon.equals("partly-cloudy-night")) {
  285. iconId = R.mipmap.cloudy_night;
  286. }
  287.  
  288. return iconId;
  289. }
  290.  
  291. public long getTime() {
  292. return mTime;
  293. }
  294.  
  295. public String getFormattedTime(){
  296. SimpleDateFormat formatter = new SimpleDateFormat("h:mm a");
  297. formatter.setTimeZone(TimeZone.getTimeZone(getTimeZone()));
  298. Date datetime = new Date(getTime()*1000);
  299. String timeString = formatter.format(datetime);
  300. return timeString;
  301.  
  302. }
  303.  
  304.  
  305. public void setTime(long time) {
  306. mTime = time;
  307. }
  308.  
  309. public int getTemperature() {
  310. return(int) Math.round(mTemperature);
  311. }
  312.  
  313. public void setTemperature(double temperature) {
  314. mTemperature = temperature;
  315. }
  316.  
  317. public double getHumidity() {
  318. return mHumidity;
  319. }
  320.  
  321. public void setHumidity(double humidity) {
  322. mHumidity = humidity;
  323. }
  324.  
  325. public String getSummery() {
  326. return mSummery;
  327. }
  328.  
  329. public void setSummery(String summery) {
  330. mSummery = summery;
  331. }
  332.  
  333. public int getPrecipChane() {
  334. double precipPercentage = mPrecipChane * 100;
  335. return (int)Math.round(precipPercentage) ;
  336. }
  337.  
  338. public void setPrecipChane(double precipChane) {
  339. mPrecipChane = precipChane;
  340. }
  341. }
  342.  
  343. 03-29 06:32:43.596 1779-1797/synctc.me.stormy E/MainActivity﹕ Exception Caught :
  344. org.json.JSONException: Value currently of type java.lang.String cannot be converted to JSONObject
  345. at org.json.JSON.typeMismatch(JSON.java:111)
  346. at org.json.JSONObject.<init>(JSONObject.java:160)
  347. at org.json.JSONObject.<init>(JSONObject.java:173)
  348. at synctc.me.stormy.MainActivity.getCurrentDetails(MainActivity.java:153)
  349. at synctc.me.stormy.MainActivity.access$400(MainActivity.java:37)
  350. at synctc.me.stormy.MainActivity$2.onResponse(MainActivity.java:106)
  351. at com.squareup.okhttp.Call$AsyncCall.execute(Call.java:162)
  352. at com.squareup.okhttp.internal.NamedRunnable.run(NamedRunnable.java:33)
  353. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
  354. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
  355. at java.lang.Thread.run(Thread.java:818)
  356. 03-29 06:33:01.383 1838-1838/synctc.me.stormy D/MainActivity﹕ Main ui is running
  357. 03-29 06:33:01.399 1838-1859/synctc.me.stormy D/OpenGLRenderer﹕ Render dirty regions requested: true
  358. 03-29 06:33:01.474 1838-1838/synctc.me.stormy D/﹕ HostConnection::get() New Host Connection established 0xabb93d20, tid 1838
  359. 03-29 06:33:01.529 1838-1838/synctc.me.stormy D/Atlas﹕ Validating map...
  360. 03-29 06:33:01.647 1838-1859/synctc.me.stormy D/libEGL﹕ loaded /system/lib/egl/libEGL_emulation.so
  361. 03-29 06:33:01.648 1838-1859/synctc.me.stormy D/libEGL﹕ loaded /system/lib/egl/libGLESv1_CM_emulation.so
  362. 03-29 06:33:01.665 1838-1859/synctc.me.stormy D/libEGL﹕ loaded /system/lib/egl/libGLESv2_emulation.so
  363. 03-29 06:33:01.687 1838-1859/synctc.me.stormy D/﹕ HostConnection::get() New Host Connection established 0xa3216120, tid 1859
  364. 03-29 06:33:01.718 1838-1859/synctc.me.stormy I/OpenGLRenderer﹕ Initialized EGL, version 1.4
  365. 03-29 06:33:01.843 1838-1859/synctc.me.stormy D/OpenGLRenderer﹕ Enabling debug mode 0
  366. 03-29 06:33:01.899 1838-1859/synctc.me.stormy W/EGL_emulation﹕ eglSurfaceAttrib not implemented
  367. 03-29 06:33:01.899 1838-1859/synctc.me.stormy W/OpenGLRenderer﹕ Failed to set EGL_SWAP_BEHAVIOR on surface 0xa32192a0, error=EGL_SUCCESS
  368. 03-29 06:33:02.849 1838-1858/synctc.me.stormy V/MainActivity﹕ {"latitude":37.8267,"longitude":-122.423,"timezone":"America/Los_Angeles","offset":-7,"currently":{"time":1427625186,"summary":"Clear","icon":"clear-night","nearestStormDistance":61,"nearestStormBearing":104,"precipIntensity":0,"precipProbability":0,"temperature":52.49,"apparentTemperature":52.49,"dewPoint":48.34,"humidity":0.86,"windSpeed":4.19,"windBearing":299,"visibility":6.15,"cloudCover":0.02,"pressure":1019.36,"ozone":330.14},"minutely":{"summary":"Clear for the hour.","icon":"clear-night","data":[{"time":1427625180,"precipIntensity":0,"precipProbability":0},{"time":1427625240,"precipIntensity":0,"precipProbability":0},{"time":1427625300,"precipIntensity":0,"precipProbability":0},{"time":1427625360,"precipIntensity":0,"precipProbability":0},{"time":1427625420,"precipIntensity":0,"precipProbability":0},{"time":1427625480,"precipIntensity":0,"precipProbability":0},{"time":1427625540,"precipIntensity":0,"precipProbability":0},{"time":1427625600,"precipIntensity":0,"precipProbability":0},{"time":1427625660,"precipIntensity":0,"precipProbability":0},{"time":1427625720,"precipIntensity":0,"precipProbability":0},{"time":1427625780,"precipIntensity":0,"precipProbability":0},{"time":1427625840,"precipIntensity":0,"precipProbability":0},{"time":1427625900,"precipIntensity":0,"precipProbability":0},{"time":1427625960,"precipIntensity":0,"precipProbability":0},{"time":1427626020,"precipIntensity":0,"precipProbability":0},{"time":1427626080,"precipIntensity":0,"precipProbability":0},{"time":1427626140,"precipIntensity":0,"precipProbability":0},{"time":1427626200,"precipIntensity":0,"precipProbability":0},{"time":1427626260,"precipIntensity":0,"precipProbability":0},{"time":1427626320,"precipIntensity":0,"precipProbability":0},{"time":1427626380,"precipIntensity":0,"precipProbability":0},{"time":1427626440,"precipIntensity":0,"precipProbability":0},{"time":1427626500,"precipIntensity":0,"precipProbability":0},{"time":1427626560,"precipIntensity":0,"precipProbability":0},{"time":1427626620,"precipIntensity":0,"precipProbability":0},{"time":1427626680,"precipIntensity":0,"precipProbability":0},{"time":1427626740,"precipIntensity":0,"precipProbability":0},{"time":1427626800,"precipIntensity":0,"precipProbability":0},{"time":1427626860,"precipIntensity":0,"precipProbability":0},{"time":1427626920,"precipIntensity":0,"precipProbability":0},{"time":1427626980,"precipIntensity":0,"precipProbability":0},{"time":1427627040,"precipIntensity":0,"precipProbability":0},{"time":1427627100,"precipIntensity":0,"precipProbability":0},{"time":1427627160,"precipIntensity":0,"precipProbability":0},{"time":1427627220,"precipIntensity":0,"precipProbability":0},{"time":1427627280,"precipIntensity":0,"precipProbability":0},{"time":1427627340,"precipIntensity":0,"precipProbability":0},{"time":1427627400,"precipIntensity":0,"precipProbability":0},{"time":1427627460,"precipIntensity":0,"precipProbability":0},{"time":1427627520,"precipIntensity":0,"precipProbability":0},{"time":1427627580,"precipIntensity":0,"precipProbability":0},{"time":1427627640,"precipIntensity":0,"precipProbability":0},{"time":1427627700,"precipIntensity":0,"precipProbability":0},{"time":1427627760,"precipIntensity":0,"precipProbability":0},{"time":1427627820,"precipIntensity":0,"precipProbability":0},{"time":1427627880,"precipIntensity":0,"precipProbability":0},{"time":1427627940,"precipIntensity":0,"precipProbability":0},{"time":1427628000,"precipIntensity":0,"precipProbability":0},{"time":1427628060,"precipIntensity":0,"precipProbability":0},{"time":1427628120,"precipIntensity":0,"precipProbability":0},{"time":1427628180,"precipIntensity":0,"precipProbability":0},{"time":1427628240,"precipIntensity":0,"precipProbability":0},{"time":1427628300,"precipIntensity":0,"precipProbability":0},{"time":1427628360,"precipIntensity":0,"precipProbability":0},{"time":1427628420,"precipIntensity":0,"precipProbability":0},{"time":1427628480,"precipIntensity":0,"precipProbability":0},{"time":1427628540,"precipIntensity":0,"precipProbability":0},{"time":142762860
  369. 03-29 06:33:02.859 1838-1858/synctc.me.stormy I/MainActivity﹕ From JSON To:America/Los_Angeles
  370. 03-29 06:33:02.873 1838-1858/synctc.me.stormy E/MainActivity﹕ Exception Caught :
  371. org.json.JSONException: Value currently of type java.lang.String cannot be converted to JSONObject
  372. at org.json.JSON.typeMismatch(JSON.java:111)
  373. at org.json.JSONObject.<init>(JSONObject.java:160)
  374. at org.json.JSONObject.<init>(JSONObject.java:173)
  375. at synctc.me.stormy.MainActivity.getCurrentDetails(MainActivity.java:153)
  376. at synctc.me.stormy.MainActivity.access$400(MainActivity.java:37)
  377. at synctc.me.stormy.MainActivity$2.onResponse(MainActivity.java:106)
  378. at com.squareup.okhttp.Call$AsyncCall.execute(Call.java:162)
  379. at com.squareup.okhttp.internal.NamedRunnable.run(NamedRunnable.java:33)
  380. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
  381. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
  382. at java.lang.Thread.run(Thread.java:818)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement