Add to build.gradle
implementation 'com.github.androdocs:Simple-HTTP-Request:v1.0'
XML
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_gradient"
android:orientation="vertical"
android:padding="25dp">
<RelativeLayout
android:id="@+id/mainContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="visible">
<LinearLayout
android:id="@+id/addressContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<TextView
android:textColor="#FFFFFF"
android:id="@+id/address"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="DHAKA, BD"
android:textSize="24dp" />
<TextView
android:textColor="#FFFFFF"
android:id="@+id/updated_at"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="20 April 2012, 20:08 PM"
android:textSize="14dp" />
</LinearLayout>
<LinearLayout
android:id="@+id/overviewContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:orientation="vertical">
<TextView
android:textColor="#FFFFFF"
android:id="@+id/status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Clear Sky"
android:textSize="18dp" />
<TextView
android:textColor="#FFFFFF"
android:id="@+id/temp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:fontFamily="sans-serif-thin"
android:text="29°C"
android:textSize="90dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal">
<TextView
android:textColor="#FFFFFF"
android:id="@+id/temp_min"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Min Temp: 05:05 AM" />
<Space
android:layout_width="50dp"
android:layout_height="wrap_content" />
<TextView
android:textColor="#FFFFFF"
android:id="@+id/temp_max"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Max Temp: 05:05 PM" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/detailsContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="3">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="#3CF1EBF1"
android:gravity="center"
android:orientation="vertical"
android:padding="8dp">
<ImageView
android:layout_width="25dp"
android:layout_height="25dp"
android:src="@drawable/sunrise"
android:tint="#FFFFFF" />
<Space
android:layout_width="wrap_content"
android:layout_height="5dp" />
<TextView
android:textColor="#FFFFFF"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Sunrise"
android:textSize="12dp" />
<TextView
android:textColor="#FFFFFF"
android:id="@+id/sunrise"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="06:40 AM"
android:textSize="14dp" />
</LinearLayout>
<Space
android:layout_width="10dp"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="#3CF1EBF1"
android:gravity="center"
android:orientation="vertical"
android:padding="8dp">
<ImageView
android:layout_width="25dp"
android:layout_height="25dp"
android:src="@drawable/sunset"
android:tint="#FFFFFF" />
<Space
android:layout_width="wrap_content"
android:layout_height="5dp" />
<TextView
android:textColor="#FFFFFF"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Sunset"
android:textSize="12dp" />
<TextView
android:textColor="#FFFFFF"
android:id="@+id/sunset"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="06:40 AM"
android:textSize="14dp" />
</LinearLayout>
<Space
android:layout_width="10dp"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="#3CF1EBF1"
android:gravity="center"
android:orientation="vertical"
android:padding="8dp">
<ImageView
android:layout_width="25dp"
android:layout_height="25dp"
android:src="@drawable/wind"
android:tint="#FFFFFF" />
<Space
android:layout_width="wrap_content"
android:layout_height="5dp" />
<TextView
android:textColor="#FFFFFF"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Wind"
android:textSize="12dp" />
<TextView
android:textColor="#FFFFFF"
android:id="@+id/wind"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="06:40 AM"
android:textSize="14dp" />
</LinearLayout>
</LinearLayout>
<Space
android:layout_width="wrap_content"
android:layout_height="10dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="3">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="#3CF1EBF1"
android:gravity="center"
android:orientation="vertical"
android:padding="8dp">
<ImageView
android:layout_width="25dp"
android:layout_height="25dp"
android:src="@drawable/pressure"
android:tint="#FFFFFF" />
<Space
android:layout_width="wrap_content"
android:layout_height="5dp" />
<TextView
android:textColor="#FFFFFF"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Pressure"
android:textSize="12dp" />
<TextView
android:textColor="#FFFFFF"
android:id="@+id/pressure"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="06:40 AM"
android:textSize="14dp" />
</LinearLayout>
<Space
android:layout_width="10dp"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="#3CF1EBF1"
android:gravity="center"
android:orientation="vertical"
android:padding="8dp">
<ImageView
android:layout_width="25dp"
android:layout_height="25dp"
android:src="@drawable/humidity"
android:tint="#FFFFFF" />
<Space
android:layout_width="wrap_content"
android:layout_height="5dp" />
<TextView
android:textColor="#FFFFFF"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Humidity"
android:textSize="12dp" />
<TextView
android:textColor="#FFFFFF"
android:id="@+id/humidity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="06:40 AM"
android:textSize="14dp" />
</LinearLayout>
<Space
android:layout_width="10dp"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="#3CF1EBF1"
android:gravity="center"
android:orientation="vertical"
android:padding="8dp">
<ImageView
android:layout_width="25dp"
android:layout_height="25dp"
android:src="@drawable/info"
android:tint="#FFFFFF" />
<Space
android:layout_width="wrap_content"
android:layout_height="5dp" />
<TextView
android:textColor="#FFFFFF"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Created By"
android:textSize="12dp" />
<TextView
android:textColor="#FFFFFF"
android:id="@+id/about"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="AndroDocs"
android:textSize="14dp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
<ProgressBar
android:id="@+id/loader"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:visibility="gone" />
<TextView
android:id="@+id/errorText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Something went wrong"
android:visibility="gone" />
public class WeatherActivity extends AppCompatActivity {
// String CITY = "surat";
String API = "8118ed6ee68db2debfaaa5a44c832918";
String locality;
TextView addressTxt, updated_atTxt, statusTxt, tempTxt, temp_minTxt, temp_maxTxt,
sunriseTxt, sunsetTxt, windTxt, pressureTxt, humidityTxt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (Build.VERSION.SDK_INT >= 21) {
getWindow().clearFlags(67108864);
getWindow().setStatusBarColor(ContextCompat.getColor(this,
R.color.weatheract));
}
setContentView(R.layout.activity_weather);
addressTxt = findViewById(R.id.address);
updated_atTxt = findViewById(R.id.updated_at);
statusTxt = findViewById(R.id.status);
tempTxt = findViewById(R.id.temp);
temp_minTxt = findViewById(R.id.temp_min);
temp_maxTxt = findViewById(R.id.temp_max);
sunriseTxt = findViewById(R.id.sunrise);
sunsetTxt = findViewById(R.id.sunset);
windTxt = findViewById(R.id.wind);
pressureTxt = findViewById(R.id.pressure);
humidityTxt = findViewById(R.id.humidity);
LocationManager locationManager = (LocationManager)
getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
&& ContextCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
Location location =
locationManager.getLastKnownLocation(locationManager.getBestProvider(criteria,
false));
if (location != null) {
getCity(location.getLatitude(), location.getLongitude());
}
}
}
private final void getCity(double d2, double d3) {
List list;
try {
list = new Geocoder(getApplicationContext(),
Locale.getDefault()).getFromLocation(d2, d3, 1);
if (list != null && (!list.isEmpty())) {
locality = ((Address) list.get(0)).getLocality();
new weatherTask().execute();
}
} catch (NullPointerException e2) {
} catch (IOException e) {
e.printStackTrace();
}
}
class weatherTask extends AsyncTask<String, Void, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
/* Showing the ProgressBar, Making the main design GONE */
findViewById(R.id.loader).setVisibility(View.VISIBLE);
findViewById(R.id.mainContainer).setVisibility(View.GONE);
findViewById(R.id.errorText).setVisibility(View.GONE);
}
protected String doInBackground(String... args) {
String response =
HttpRequest.excuteGet("https://api.openweathermap.org/data/2.5/weather?q=" + locality
+ "&units=metric&appid=" + API);
return response;
}
@Override
protected void onPostExecute(String result) {
try {
JSONObject jsonObj = new JSONObject(result);
JSONObject main = jsonObj.getJSONObject("main");
JSONObject sys = jsonObj.getJSONObject("sys");
JSONObject wind = jsonObj.getJSONObject("wind");
JSONObject weather = jsonObj.getJSONArray("weather").getJSONObject(0);
Long updatedAt = jsonObj.getLong("dt");
String updatedAtText = "Updated at: " + new SimpleDateFormat("dd/MM/yyyy
hh:mm a", Locale.ENGLISH).format(new Date(updatedAt * 1000));
String temp = main.getString("temp") + "°C";
String tempMin = "Min Temp: " + main.getString("temp_min") + "°C";
String tempMax = "Max Temp: " + main.getString("temp_max") + "°C";
String pressure = main.getString("pressure");
String humidity = main.getString("humidity");
Long sunrise = sys.getLong("sunrise");
Long sunset = sys.getLong("sunset");
String windSpeed = wind.getString("speed");
String weatherDescription = weather.getString("description");
String address = jsonObj.getString("name") + ", " +
sys.getString("country");
/* Populating extracted data into our views */
addressTxt.setText(address);
updated_atTxt.setText(updatedAtText);
statusTxt.setText(weatherDescription.toUpperCase());
tempTxt.setText(temp);
temp_minTxt.setText(tempMin);
temp_maxTxt.setText(tempMax);
sunriseTxt.setText(new SimpleDateFormat("hh:mm a",
Locale.ENGLISH).format(new Date(sunrise * 1000)));
sunsetTxt.setText(new SimpleDateFormat("hh:mm a",
Locale.ENGLISH).format(new Date(sunset * 1000)));
windTxt.setText(windSpeed);
pressureTxt.setText(pressure);
humidityTxt.setText(humidity);
/* Views populated, Hiding the loader, Showing the main design */
findViewById(R.id.loader).setVisibility(View.GONE);
findViewById(R.id.mainContainer).setVisibility(View.VISIBLE);
} catch (JSONException e) {
findViewById(R.id.loader).setVisibility(View.GONE);
findViewById(R.id.errorText).setVisibility(View.VISIBLE);
}
}
}
}