Mobile_Application_Developm.../DailyHelper/app/src/main/java/at/fhj/swd/dailyhelper/adapter/WeatherListAdapter.java

135 lines
4.1 KiB
Java

package at.fhj.swd.dailyhelper.adapter;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.AsyncTask;
import android.support.annotation.NonNull;
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
import java.util.List;
import at.fhj.swd.dailyhelper.R;
import at.fhj.swd.dailyhelper.model.Weather;
public class WeatherListAdapter extends RecyclerView.Adapter<WeatherListAdapter.WeatherItemViewHolder> {
private ImageView imageView;
private List<Weather> weathers;
private ItemClickListener itemClickListener;
public WeatherListAdapter(List<Weather> weathers, ItemClickListener itemClickListener) {
this.weathers = weathers;
this.itemClickListener = itemClickListener;
}
@NonNull
@Override
public WeatherItemViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.weather_list_item, viewGroup, false);
return new WeatherItemViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull WeatherItemViewHolder weatherItemViewHolder, int i) {
Context context = weatherItemViewHolder.tvDate.getContext();
weatherItemViewHolder.cvWeatherItem.setOnClickListener(v -> {
Weather weather = weathers.get(weatherItemViewHolder.getAdapterPosition());
itemClickListener.onItemClicked(weather, weatherItemViewHolder.getAdapterPosition());
});
weatherItemViewHolder.tvDate.setText(weathers.get(i).getDate());
String icon = weathers.get(i).getIcon();
new DownloadImageTask(imageView).execute("https://openweathermap.org/img/w/" + icon + ".png");
weatherItemViewHolder.tvDescription.setText(weathers.get(i).getDescription());
weatherItemViewHolder.tvTemperature.setText(context.getString(R.string.temperature) + ": " + weathers.get(i).getTemp() + "°C");
weatherItemViewHolder.tvHumity.setText(context.getString(R.string.humidity) + ": " + weathers.get(i).getHumidity()+"%");
}
@Override
public int getItemCount() {
return weathers.size();
}
class WeatherItemViewHolder extends RecyclerView.ViewHolder {
CardView cvWeatherItem;
TextView tvDate;
TextView tvDescription;
TextView tvTemperature;
TextView tvHumity;
public WeatherItemViewHolder(@NonNull View itemView) {
super(itemView);
cvWeatherItem = itemView.findViewById(R.id.cvWeatherItem);
tvDate = itemView.findViewById(R.id.tvDate);
imageView = itemView.findViewById(R.id.card_view_image);
tvDescription = itemView.findViewById(R.id.tvDescription);
tvTemperature = itemView.findViewById(R.id.tvTemperature);
tvHumity = itemView.findViewById(R.id.tvHumity);
}
}
public interface ItemClickListener {
void onItemClicked(Weather weather, int position);
}
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;
public DownloadImageTask(ImageView bmImage) {
this.bmImage = bmImage;
}
protected Bitmap doInBackground(String... urls) {
String urldisplay = urls[0];
Bitmap bmp = null;
try {
InputStream in = new java.net.URL(urldisplay).openStream();
bmp = BitmapFactory.decodeStream(in);
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return bmp;
}
protected void onPostExecute(Bitmap result) {
bmImage.setImageBitmap(result);
}
}
}