diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..8b11ef3 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,9 @@ +# +# https://help.github.com/articles/dealing-with-line-endings/ +# +# These are explicitly windows files and should use crlf + +* text=auto eol=lf + +*.bat text eol=crlf +*.nsi text eol=crlf \ No newline at end of file diff --git a/src/app/build.gradle b/src/app/build.gradle index 426cea8..e3b27f0 100644 --- a/src/app/build.gradle +++ b/src/app/build.gradle @@ -40,6 +40,8 @@ dependencies { implementation libs.lifecycle.viewmodel.ktx implementation libs.navigation.fragment implementation libs.navigation.ui + implementation libs.retrofit2.retrofit + implementation libs.converter.gson testImplementation libs.junit androidTestImplementation libs.ext.junit androidTestImplementation libs.espresso.core diff --git a/src/app/src/main/AndroidManifest.xml b/src/app/src/main/AndroidManifest.xml index 28e08e8..4849da5 100644 --- a/src/app/src/main/AndroidManifest.xml +++ b/src/app/src/main/AndroidManifest.xml @@ -2,6 +2,7 @@ + { - private String[] localDataSet; + private List localDataSet; public static class ViewHolder extends RecyclerView.ViewHolder { @@ -29,7 +32,7 @@ public class CustomAdapter extends RecyclerView.Adapter dataSet) { localDataSet = dataSet; } @@ -49,12 +52,12 @@ public class CustomAdapter extends RecyclerView.Adapter weatherDataList = new ArrayList<>(); public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -38,15 +53,21 @@ public class HomeFragment extends Fragment { binding = FragmentHomeBinding.inflate(inflater, container, false); View root = binding.getRoot(); + Retrofit retrofit = new Retrofit.Builder() + .baseUrl("https://raw.githubusercontent.com/Lpirskaya/JsonLab/refs/heads/master/") + .addConverterFactory(GsonConverterFactory.create()) + .build(); + service = retrofit.create(WeatherService.class); + +// String[] city_list = getResources().getStringArray(R.array.city_list); +// Arrays.sort(city_list); - String[] city_list = getResources().getStringArray(R.array.city_list); - Arrays.sort(city_list); RecyclerView recyclerView = root.findViewById(R.id.suslik); recyclerView.addOnItemTouchListener(new RecyclerItemClickListener(root.getContext(), recyclerView ,new RecyclerItemClickListener.OnItemClickListener() { @Override public void onItemClick(View view, int position) { - Log.e("HomeFragment", "onClick: " + city_list[position]); + Log.e("HomeFragment", "onClick: " + weatherDataList.get(position).City); if (getActivity() instanceof MainActivity2) { - ((MainActivity2) getActivity()).setCurrentCity(city_list[position]); + ((MainActivity2) getActivity()).setCurrentCity(weatherDataList.get(position)); } } @@ -56,15 +77,60 @@ public class HomeFragment extends Fragment { } })); recyclerView.setLayoutManager(new LinearLayoutManager(root.getContext())); - CustomAdapter adapter = new CustomAdapter(city_list); + CustomAdapter adapter = new CustomAdapter(weatherDataList); recyclerView.setAdapter(adapter); + return root; } + public interface WeatherService { + @GET("Weather2022.json") + Call getWeather2022(); + } + @Override public void onDestroyView() { super.onDestroyView(); binding = null; } + + @Override + public void onResume() { + super.onResume(); + service.getWeather2022().enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + JsonArray weatherData = response.body(); + Log.d("HomeFragment", "Weather data: " + weatherData); + weatherDataList = new ArrayList<>(weatherData.size()); + for (int i = 0; i < weatherData.size(); i++) { + weatherDataList.add(new WeatherData( + weatherData.get(i).getAsJsonObject().get("City").getAsString(), + weatherData.get(i).getAsJsonObject().get("Temperature").getAsString(), + weatherData.get(i).getAsJsonObject().get("WeatherCondition").getAsString(), + weatherData.get(i).getAsJsonObject().get("AtmosphericPressure").getAsString(), + weatherData.get(i).getAsJsonObject().get("Wind").getAsString() + )); + + weatherDataList.sort((o1, o2) -> o1.City.compareTo(o2.City)); +// JsonObject item = weatherData.get(i).getAsJsonObject(); +// Log.i("HomeFragment", "City: " + item.get("City").getAsString()); +// Log.i("HomeFragment", "Temperature: " + item.get("Temperature").getAsInt()); +// Log.i("HomeFragment", "WeatherCondition: " + item.get("WeatherCondition").getAsString()); +// Log.i("HomeFragment", "AtmosphericPressure: " + item.get("AtmosphericPressure").getAsString()); +// Log.i("HomeFragment", "Wind: " + item.get("Wind").getAsString()); +// Log.i("HomeFragment", "-------------------"); + } + } else + Log.e("HomeFragment", "Request failed: " + response.message()); + } + + @Override + public void onFailure(Call call, Throwable t) { + Log.e("HomeFragment", "Network request failed", t); + } + }); + } } \ No newline at end of file diff --git a/src/app/src/main/res/layout/fragment_gallery.xml b/src/app/src/main/res/layout/fragment_gallery.xml index b37f67c..b5c4a17 100644 --- a/src/app/src/main/res/layout/fragment_gallery.xml +++ b/src/app/src/main/res/layout/fragment_gallery.xml @@ -6,6 +6,7 @@ android:layout_height="match_parent" tools:context=".ui.gallery.GalleryFragment"> + + + + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.528" /> + + + + + + + + \ No newline at end of file diff --git a/src/gradle/libs.versions.toml b/src/gradle/libs.versions.toml index 3948c5a..d647543 100644 --- a/src/gradle/libs.versions.toml +++ b/src/gradle/libs.versions.toml @@ -11,8 +11,10 @@ lifecycleLivedataKtx = "2.8.5" lifecycleViewmodelKtx = "2.8.5" navigationFragment = "2.6.0" navigationUi = "2.6.0" +retrofitVersion = "2.9.0" [libraries] +converter-gson = { module = "com.squareup.retrofit2:converter-gson", version.ref = "retrofitVersion" } junit = { group = "junit", name = "junit", version.ref = "junit" } ext-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" } espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" } @@ -24,6 +26,7 @@ lifecycle-livedata-ktx = { group = "androidx.lifecycle", name = "lifecycle-lived lifecycle-viewmodel-ktx = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-ktx", version.ref = "lifecycleViewmodelKtx" } navigation-fragment = { group = "androidx.navigation", name = "navigation-fragment", version.ref = "navigationFragment" } navigation-ui = { group = "androidx.navigation", name = "navigation-ui", version.ref = "navigationUi" } +retrofit2-retrofit = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofitVersion" } [plugins] android-application = { id = "com.android.application", version.ref = "agp" }