diff --git a/app/build.gradle b/app/build.gradle index 97759200..a48b0ad7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -100,6 +100,8 @@ dependencies { implementation libs.androidx.room.runtime annotationProcessor libs.androidx.room.compiler annotationProcessor libs.glide.compiler + implementation libs.retrofit2 + implementation libs.retrofit2.converter.gson // Testing testImplementation libs.junit diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 28a49287..f4759345 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -316,6 +316,18 @@ android:label="@string/room_database" android:parentActivityName=".ui.screens.android.lessons.data.room.RoomActivity" /> + + + + getTodo(); + } + + static class Todo { + public String title; + } + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + binding = ActivityRetrofitBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + + EdgeToEdgeDelegate edgeToEdgeDelegate = new EdgeToEdgeDelegate(this); + edgeToEdgeDelegate.applyEdgeToEdge(binding.constraintLayout); + + Retrofit retrofit = new Retrofit.Builder() + .baseUrl("https://jsonplaceholder.typicode.com/") + .addConverterFactory(GsonConverterFactory.create()) + .build(); + api = retrofit.create(JsonPlaceholderApi.class); + + binding.buttonFetch.setOnClickListener(v -> { + binding.buttonFetch.setEnabled(false); + api.getTodo().enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful() && response.body() != null) { + binding.textViewResult.setText(response.body().title); + } else { + binding.textViewResult.setText(R.string.snack_general_error); + } + binding.buttonFetch.setEnabled(true); + } + + @Override + public void onFailure(Call call, Throwable t) { + binding.textViewResult.setText(R.string.snack_general_error); + binding.buttonFetch.setEnabled(true); + } + }); + }); + + binding.floatingButtonShowSyntax.setOnClickListener(v -> + startActivity(new Intent(RetrofitActivity.this, RetrofitCodeActivity.class))); + handler.postDelayed(() -> binding.floatingButtonShowSyntax.shrink(), 5000); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + handler.removeCallbacksAndMessages(null); + } +} diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/networking/retrofit/RetrofitCodeActivity.java b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/networking/retrofit/RetrofitCodeActivity.java new file mode 100644 index 00000000..234ac2de --- /dev/null +++ b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/networking/retrofit/RetrofitCodeActivity.java @@ -0,0 +1,80 @@ +package com.d4rk.androidtutorials.java.ui.screens.android.lessons.networking.retrofit; + +import android.os.Bundle; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.viewpager2.adapter.FragmentStateAdapter; + +import com.d4rk.androidtutorials.java.R; +import com.d4rk.androidtutorials.java.databinding.ActivityTabLayoutBinding; +import com.d4rk.androidtutorials.java.ui.components.navigation.UpNavigationActivity; +import com.d4rk.androidtutorials.java.ui.screens.android.lessons.networking.retrofit.tabs.RetrofitTabCodeFragment; +import com.d4rk.androidtutorials.java.ui.screens.android.lessons.networking.retrofit.tabs.RetrofitTabLayoutFragment; +import com.d4rk.androidtutorials.java.utils.EdgeToEdgeDelegate; +import com.google.android.material.tabs.TabLayoutMediator; + +import java.util.ArrayList; + +/** + * Displays Java and XML snippets for the Retrofit example. + */ +public class RetrofitCodeActivity extends UpNavigationActivity { + private ActivityTabLayoutBinding binding; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + binding = ActivityTabLayoutBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + + EdgeToEdgeDelegate edgeToEdgeDelegate = new EdgeToEdgeDelegate(this); + edgeToEdgeDelegate.applyEdgeToEdge(binding.appBarLayout); + + setupViewPager(); + + new TabLayoutMediator(binding.tabs, binding.viewpager, (tab, position) -> { + ViewPagerAdapter adapter = (ViewPagerAdapter) binding.viewpager.getAdapter(); + if (adapter != null) { + tab.setText(adapter.getPageTitle(position)); + } + }).attach(); + } + + private void setupViewPager() { + ViewPagerAdapter adapter = new ViewPagerAdapter(this); + adapter.addFragment(new RetrofitTabCodeFragment(), getString(R.string.code_java)); + adapter.addFragment(new RetrofitTabLayoutFragment(), getString(R.string.layout_xml)); + binding.viewpager.setAdapter(adapter); + } + + private static class ViewPagerAdapter extends FragmentStateAdapter { + private final ArrayList fragmentList = new ArrayList<>(); + private final ArrayList fragmentTitleList = new ArrayList<>(); + + ViewPagerAdapter(@NonNull UpNavigationActivity activity) { + super(activity); + } + + void addFragment(@NonNull Fragment fragment, @NonNull String title) { + fragmentList.add(fragment); + fragmentTitleList.add(title); + } + + @NonNull + @Override + public Fragment createFragment(int position) { + return fragmentList.get(position); + } + + @Override + public int getItemCount() { + return fragmentList.size(); + } + + CharSequence getPageTitle(int position) { + return fragmentTitleList.get(position); + } + } +} diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/networking/retrofit/tabs/RetrofitTabCodeFragment.java b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/networking/retrofit/tabs/RetrofitTabCodeFragment.java new file mode 100644 index 00000000..fb034ed0 --- /dev/null +++ b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/networking/retrofit/tabs/RetrofitTabCodeFragment.java @@ -0,0 +1,58 @@ +package com.d4rk.androidtutorials.java.ui.screens.android.lessons.networking.retrofit.tabs; + +import android.content.SharedPreferences; +import android.graphics.Typeface; +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.preference.PreferenceManager; + +import com.d4rk.androidtutorials.java.R; +import com.d4rk.androidtutorials.java.databinding.FragmentCodeBinding; +import com.d4rk.androidtutorials.java.utils.CodeHighlighter; +import com.d4rk.androidtutorials.java.utils.CodeViewUtils; +import com.d4rk.androidtutorials.java.utils.FontManager; +import com.google.android.gms.ads.AdRequest; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; + +import me.zhanghai.android.fastscroll.FastScrollerBuilder; + +/** + * Shows the Java implementation for the Retrofit example. + */ +public class RetrofitTabCodeFragment extends Fragment { + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + FragmentCodeBinding binding = FragmentCodeBinding.inflate(inflater, container, false); + new FastScrollerBuilder(binding.scrollView).useMd2Style().build(); + binding.adView.loadAd(new AdRequest.Builder().build()); + + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(requireContext()); + Typeface monospaceFont = FontManager.getMonospaceFont(requireContext(), prefs); + CodeViewUtils.applyDefaults(monospaceFont, binding.codeView); + + StringBuilder builder = new StringBuilder(); + InputStream inputStream = getResources().openRawResource(R.raw.text_retrofit_java); + try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) { + String line; + while ((line = reader.readLine()) != null) { + builder.append(line).append('\n'); + } + binding.codeView.setText(builder.toString()); + CodeHighlighter.applyJavaTheme(binding.codeView); + } catch (IOException e) { + Log.e("RetrofitTabCode", "Error reading code", e); + } + return binding.getRoot(); + } +} diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/networking/retrofit/tabs/RetrofitTabLayoutFragment.java b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/networking/retrofit/tabs/RetrofitTabLayoutFragment.java new file mode 100644 index 00000000..a484472d --- /dev/null +++ b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/networking/retrofit/tabs/RetrofitTabLayoutFragment.java @@ -0,0 +1,58 @@ +package com.d4rk.androidtutorials.java.ui.screens.android.lessons.networking.retrofit.tabs; + +import android.content.SharedPreferences; +import android.graphics.Typeface; +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.preference.PreferenceManager; + +import com.d4rk.androidtutorials.java.R; +import com.d4rk.androidtutorials.java.databinding.FragmentLayoutBinding; +import com.d4rk.androidtutorials.java.utils.CodeHighlighter; +import com.d4rk.androidtutorials.java.utils.CodeViewUtils; +import com.d4rk.androidtutorials.java.utils.FontManager; +import com.google.android.gms.ads.AdRequest; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; + +import me.zhanghai.android.fastscroll.FastScrollerBuilder; + +/** + * Shows the XML layout for the Retrofit example. + */ +public class RetrofitTabLayoutFragment extends Fragment { + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + FragmentLayoutBinding binding = FragmentLayoutBinding.inflate(inflater, container, false); + new FastScrollerBuilder(binding.scrollView).useMd2Style().build(); + binding.adView.loadAd(new AdRequest.Builder().build()); + + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(requireContext()); + Typeface monospaceFont = FontManager.getMonospaceFont(requireContext(), prefs); + CodeViewUtils.applyDefaults(monospaceFont, binding.codeView); + + StringBuilder builder = new StringBuilder(); + InputStream inputStream = getResources().openRawResource(R.raw.text_retrofit_xml); + try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) { + String line; + while ((line = reader.readLine()) != null) { + builder.append(line).append('\n'); + } + binding.codeView.setText(builder.toString()); + CodeHighlighter.applyXmlTheme(binding.codeView); + } catch (IOException e) { + Log.e("RetrofitTabLayout", "Error reading layout", e); + } + return binding.getRoot(); + } +} diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/repository/LessonRepository.java b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/repository/LessonRepository.java index a57ade15..0cd4702f 100644 --- a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/repository/LessonRepository.java +++ b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/repository/LessonRepository.java @@ -38,6 +38,8 @@ public com.d4rk.androidtutorials.java.data.repository.LessonRepository.Lesson ge new com.d4rk.androidtutorials.java.data.repository.LessonRepository.Lesson(R.string.grid_view, R.raw.text_grid_view_java, R.raw.text_grid_view_xml); case "WebView" -> new com.d4rk.androidtutorials.java.data.repository.LessonRepository.Lesson(R.string.web_view, R.raw.text_webview_java, R.raw.text_webview_xml); + case "Retrofit" -> + new com.d4rk.androidtutorials.java.data.repository.LessonRepository.Lesson(R.string.retrofit, R.raw.text_retrofit_java, R.raw.text_retrofit_xml); case "BottomNavigation" -> new com.d4rk.androidtutorials.java.data.repository.LessonRepository.Lesson(R.string.bottom_navigation, R.raw.text_bottom_navigation_java, R.raw.text_bottom_navigation_xml); case "NavigationDrawer" -> diff --git a/app/src/main/res/drawable-anydpi/ic_category_network_tinted.xml b/app/src/main/res/drawable-anydpi/ic_category_network_tinted.xml new file mode 100644 index 00000000..487195ba --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_category_network_tinted.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_retrofit.xml b/app/src/main/res/layout/activity_retrofit.xml new file mode 100644 index 00000000..1e507436 --- /dev/null +++ b/app/src/main/res/layout/activity_retrofit.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/raw/text_retrofit_java.txt b/app/src/main/res/raw/text_retrofit_java.txt new file mode 100644 index 00000000..6b2e70a8 --- /dev/null +++ b/app/src/main/res/raw/text_retrofit_java.txt @@ -0,0 +1,83 @@ +package com.d4rk.androidtutorials.java.ui.screens.android.lessons.networking.retrofit; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; + +import androidx.annotation.Nullable; + +import com.d4rk.androidtutorials.java.databinding.ActivityRetrofitBinding; +import com.d4rk.androidtutorials.java.ui.components.navigation.UpNavigationActivity; +import com.d4rk.androidtutorials.java.utils.EdgeToEdgeDelegate; + +import com.d4rk.androidtutorials.java.R; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.Retrofit; +import retrofit2.converter.gson.GsonConverterFactory; +import retrofit2.http.GET; + +public class RetrofitActivity extends UpNavigationActivity { + private ActivityRetrofitBinding binding; + private final Handler handler = new Handler(Looper.getMainLooper()); + private JsonPlaceholderApi api; + + interface JsonPlaceholderApi { + @GET("todos/1") + Call getTodo(); + } + + static class Todo { + public String title; + } + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + binding = ActivityRetrofitBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + + EdgeToEdgeDelegate edgeToEdgeDelegate = new EdgeToEdgeDelegate(this); + edgeToEdgeDelegate.applyEdgeToEdge(binding.constraintLayout); + + Retrofit retrofit = new Retrofit.Builder() + .baseUrl("https://jsonplaceholder.typicode.com/") + .addConverterFactory(GsonConverterFactory.create()) + .build(); + api = retrofit.create(JsonPlaceholderApi.class); + + binding.buttonFetch.setOnClickListener(v -> { + binding.buttonFetch.setEnabled(false); + api.getTodo().enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful() && response.body() != null) { + binding.textViewResult.setText(response.body().title); + } else { + binding.textViewResult.setText(R.string.snack_general_error); + } + binding.buttonFetch.setEnabled(true); + } + + @Override + public void onFailure(Call call, Throwable t) { + binding.textViewResult.setText(R.string.snack_general_error); + binding.buttonFetch.setEnabled(true); + } + }); + }); + + binding.floatingButtonShowSyntax.setOnClickListener(v -> + startActivity(new Intent(RetrofitActivity.this, RetrofitCodeActivity.class))); + handler.postDelayed(() -> binding.floatingButtonShowSyntax.shrink(), 5000); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + handler.removeCallbacksAndMessages(null); + } +} diff --git a/app/src/main/res/raw/text_retrofit_xml.txt b/app/src/main/res/raw/text_retrofit_xml.txt new file mode 100644 index 00000000..1e507436 --- /dev/null +++ b/app/src/main/res/raw/text_retrofit_xml.txt @@ -0,0 +1,53 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/values-ar-rEG/strings.xml b/app/src/main/res/values-ar-rEG/strings.xml index eac6ccf4..f7e7cb4d 100644 --- a/app/src/main/res/values-ar-rEG/strings.xml +++ b/app/src/main/res/values-ar-rEG/strings.xml @@ -441,4 +441,9 @@ لقطة شاشة تعرض زر مشروع جديد في Android Studio. لقطة شاشة تعرض اختيار نوع النشاط أثناء إعداد المشروع. لقطة شاشة تعرض حقول اسم التطبيق والحزمة واللغة وSDK الأدنى. - \ No newline at end of file + Networking + Retrofit + Fetch data + Make HTTP requests with Retrofit. + Retrofit is a type-safe HTTP client for Android and Java. This example fetches data from a web service. + diff --git a/app/src/main/res/values-bg-rBG/strings.xml b/app/src/main/res/values-bg-rBG/strings.xml index d40a320b..0cccd0be 100644 --- a/app/src/main/res/values-bg-rBG/strings.xml +++ b/app/src/main/res/values-bg-rBG/strings.xml @@ -441,4 +441,9 @@ Екранна снимка, показваща бутона Нов проект в Android Studio. Екранна снимка, показваща избор на тип активност при настройка на проекта. Екранна снимка, показваща полета за име на приложение, пакет, език и минимален SDK. - \ No newline at end of file + Networking + Retrofit + Fetch data + Make HTTP requests with Retrofit. + Retrofit is a type-safe HTTP client for Android and Java. This example fetches data from a web service. + diff --git a/app/src/main/res/values-bn-rBD/strings.xml b/app/src/main/res/values-bn-rBD/strings.xml index 87ead7df..08b4cfff 100644 --- a/app/src/main/res/values-bn-rBD/strings.xml +++ b/app/src/main/res/values-bn-rBD/strings.xml @@ -441,4 +441,9 @@ স্ক্রিনশটে Android Studio-তে নতুন প্রকল্প বোতাম দেখা যাচ্ছে। স্ক্রিনশটে প্রকল্প সেটআপের সময় অ্যাক্টিভিটি টাইপ নির্বাচন দেখা যাচ্ছে। স্ক্রিনশটে অ্যাপ নাম, প্যাকেজ, ভাষা ও ন্যূনতম SDK ফিল্ড দেখা যাচ্ছে। - \ No newline at end of file + Networking + Retrofit + Fetch data + Make HTTP requests with Retrofit. + Retrofit is a type-safe HTTP client for Android and Java. This example fetches data from a web service. + diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index de3b48d0..146a7199 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -441,4 +441,9 @@ Screenshot mit der Schaltfläche Neues Projekt in Android Studio. Screenshot mit der Auswahl des Aktivitätstyps während der Projekteinrichtung. Screenshot mit Feldern für App-Name, Paket, Sprache und minimale SDK. - \ No newline at end of file + Networking + Retrofit + Fetch data + Make HTTP requests with Retrofit. + Retrofit is a type-safe HTTP client for Android and Java. This example fetches data from a web service. + diff --git a/app/src/main/res/values-es-rGQ/strings.xml b/app/src/main/res/values-es-rGQ/strings.xml index b56ed3ae..deb4b209 100644 --- a/app/src/main/res/values-es-rGQ/strings.xml +++ b/app/src/main/res/values-es-rGQ/strings.xml @@ -441,4 +441,9 @@ Captura de pantalla que muestra el botón Nuevo proyecto en Android Studio. Captura de pantalla que muestra la selección del tipo de actividad durante la configuración. Captura de pantalla que muestra campos para nombre de la app, paquete, idioma y SDK mínimo. - \ No newline at end of file + Networking + Retrofit + Fetch data + Make HTTP requests with Retrofit. + Retrofit is a type-safe HTTP client for Android and Java. This example fetches data from a web service. + diff --git a/app/src/main/res/values-es-rMX/strings.xml b/app/src/main/res/values-es-rMX/strings.xml index 8dbe7129..fc240460 100644 --- a/app/src/main/res/values-es-rMX/strings.xml +++ b/app/src/main/res/values-es-rMX/strings.xml @@ -441,4 +441,9 @@ Captura de pantalla que muestra el botón Nuevo proyecto en Android Studio. Captura de pantalla que muestra la selección del tipo de actividad durante la configuración. Captura de pantalla que muestra campos para nombre de la app, paquete, idioma y SDK mínimo. - \ No newline at end of file + Networking + Retrofit + Fetch data + Make HTTP requests with Retrofit. + Retrofit is a type-safe HTTP client for Android and Java. This example fetches data from a web service. + diff --git a/app/src/main/res/values-fil-rPH/strings.xml b/app/src/main/res/values-fil-rPH/strings.xml index c25bfca3..8a2f44f4 100644 --- a/app/src/main/res/values-fil-rPH/strings.xml +++ b/app/src/main/res/values-fil-rPH/strings.xml @@ -441,4 +441,9 @@ Screenshot na nagpapakita ng button na New project sa Android Studio. Screenshot na nagpapakita ng pagpili ng uri ng activity sa pag-set up ng proyekto. Screenshot na nagpapakita ng mga field para sa pangalan ng app, package, wika, at minimum SDK. - \ No newline at end of file + Networking + Retrofit + Fetch data + Make HTTP requests with Retrofit. + Retrofit is a type-safe HTTP client for Android and Java. This example fetches data from a web service. + diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index 65ad2c89..194744af 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -441,4 +441,9 @@ Capture d’écran montrant le bouton Nouveau projet dans Android Studio. Capture d’écran montrant la sélection du type d’activité pendant la configuration du projet. Capture d’écran montrant les champs nom de l’appli, package, langue et SDK minimal. - \ No newline at end of file + Networking + Retrofit + Fetch data + Make HTTP requests with Retrofit. + Retrofit is a type-safe HTTP client for Android and Java. This example fetches data from a web service. + diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index d4e3bf8d..c482bf4f 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -442,4 +442,9 @@ स्क्रीनशॉट जिसमें Android Studio में नया प्रोजेक्ट बटन दिख रहा है। स्क्रीनशॉट जिसमें प्रोजेक्ट सेटअप के दौरान एक्टिविटी प्रकार चुनना दिख रहा है। स्क्रीनशॉट जिसमें ऐप नाम, पैकेज, भाषा और न्यूनतम SDK के फ़ील्ड दिख रहे हैं। - \ No newline at end of file + Networking + Retrofit + Fetch data + Make HTTP requests with Retrofit. + Retrofit is a type-safe HTTP client for Android and Java. This example fetches data from a web service. + diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index 86cce098..8a6344ae 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -250,4 +250,9 @@ Beállítások Megjelenés Téma + Networking + Retrofit + Fetch data + Make HTTP requests with Retrofit. + Retrofit is a type-safe HTTP client for Android and Java. This example fetches data from a web service. diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index 17f651c0..223bae31 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -441,4 +441,9 @@ Cuplikan layar yang menampilkan tombol Proyek baru di Android Studio. Cuplikan layar yang menampilkan pemilihan jenis aktivitas saat menyiapkan proyek. Cuplikan layar yang menampilkan kolom nama aplikasi, paket, bahasa, dan SDK minimum. - \ No newline at end of file + Networking + Retrofit + Fetch data + Make HTTP requests with Retrofit. + Retrofit is a type-safe HTTP client for Android and Java. This example fetches data from a web service. + diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 57960707..24185995 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -250,4 +250,9 @@ Impostazioni Aspetto Tema + Networking + Retrofit + Fetch data + Make HTTP requests with Retrofit. + Retrofit is a type-safe HTTP client for Android and Java. This example fetches data from a web service. diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 28b3f0b2..ede955a5 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -250,4 +250,9 @@ 設定 外観 テーマ + Networking + Retrofit + Fetch data + Make HTTP requests with Retrofit. + Retrofit is a type-safe HTTP client for Android and Java. This example fetches data from a web service. diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index 12f49caa..d1311d74 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -441,4 +441,9 @@ Android Studio에서 새 프로젝트 버튼을 보여주는 스크린샷. 프로젝트 설정 중 액티비티 유형 선택을 보여주는 스크린샷. 앱 이름, 패키지, 언어 및 최소 SDK 필드를 보여주는 스크린샷. - \ No newline at end of file + Networking + Retrofit + Fetch data + Make HTTP requests with Retrofit. + Retrofit is a type-safe HTTP client for Android and Java. This example fetches data from a web service. + diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 9ce93c6a..2be6316d 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -250,4 +250,9 @@ Ustawienia Wygląd Motyw + Networking + Retrofit + Fetch data + Make HTTP requests with Retrofit. + Retrofit is a type-safe HTTP client for Android and Java. This example fetches data from a web service. diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index f412dc9d..04b1e89c 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -441,4 +441,9 @@ Captura de tela mostrando o botão Novo projeto no Android Studio. Captura de tela mostrando a seleção do tipo de atividade na configuração do projeto. Captura de tela mostrando campos de nome do app, pacote, idioma e SDK mínimo. - \ No newline at end of file + Networking + Retrofit + Fetch data + Make HTTP requests with Retrofit. + Retrofit is a type-safe HTTP client for Android and Java. This example fetches data from a web service. + diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 20e75eb7..faedb1b2 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -449,4 +449,9 @@ Captură de ecran cu butonul Proiect nou în Android Studio. Captură de ecran cu selectarea tipului de activitate în timpul configurării proiectului. Captură de ecran cu câmpurile nume aplicație, pachet, limbă și SDK minim. - \ No newline at end of file + Networking + Retrofit + Fetch data + Make HTTP requests with Retrofit. + Retrofit is a type-safe HTTP client for Android and Java. This example fetches data from a web service. + diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index bc7f15aa..dc0eec1c 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -441,4 +441,9 @@ Скриншот с кнопкой Новый проект в Android Studio. Скриншот выбора типа активности при настройке проекта. Скриншот полей имени приложения, пакета, языка и минимального SDK. - \ No newline at end of file + Networking + Retrofit + Fetch data + Make HTTP requests with Retrofit. + Retrofit is a type-safe HTTP client for Android and Java. This example fetches data from a web service. + diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index a40eda8c..20373c20 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -441,4 +441,9 @@ Skärmdump som visar knappen Nytt projekt i Android Studio. Skärmdump som visar val av aktivitetstyp vid projektkonfiguration. Skärmdump som visar fälten för appnamn, paket, språk och lägsta SDK. - \ No newline at end of file + Networking + Retrofit + Fetch data + Make HTTP requests with Retrofit. + Retrofit is a type-safe HTTP client for Android and Java. This example fetches data from a web service. + diff --git a/app/src/main/res/values-th-rTH/strings.xml b/app/src/main/res/values-th-rTH/strings.xml index d962d2a7..4a458374 100644 --- a/app/src/main/res/values-th-rTH/strings.xml +++ b/app/src/main/res/values-th-rTH/strings.xml @@ -443,4 +443,9 @@ ภาพหน้าจอแสดงปุ่มโปรเจ็กต์ใหม่ใน Android Studio. ภาพหน้าจอแสดงการเลือกประเภทกิจกรรมระหว่างตั้งค่าโปรเจ็กต์. ภาพหน้าจอแสดงช่องชื่อแอป แพ็กเกจ ภาษา และ SDK ขั้นต่ำ. - \ No newline at end of file + Networking + Retrofit + Fetch data + Make HTTP requests with Retrofit. + Retrofit is a type-safe HTTP client for Android and Java. This example fetches data from a web service. + diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index ca4b05bd..121f6439 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -441,4 +441,9 @@ Android Studio’da Yeni proje düğmesini gösteren ekran görüntüsü. Proje kurulumunda etkinlik türü seçimini gösteren ekran görüntüsü. Uygulama adı, paket, dil ve minimum SDK alanlarını gösteren ekran görüntüsü. - \ No newline at end of file + Networking + Retrofit + Fetch data + Make HTTP requests with Retrofit. + Retrofit is a type-safe HTTP client for Android and Java. This example fetches data from a web service. + diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index f03eff02..9d6b802e 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -441,4 +441,9 @@ Знімок екрана з кнопкою Новий проєкт у Android Studio. Знімок екрана вибору типу активності під час налаштування проєкту. Знімок екрана полів назви застосунку, пакета, мови та мінімального SDK. - \ No newline at end of file + Networking + Retrofit + Fetch data + Make HTTP requests with Retrofit. + Retrofit is a type-safe HTTP client for Android and Java. This example fetches data from a web service. + diff --git a/app/src/main/res/values-ur-rPK/strings.xml b/app/src/main/res/values-ur-rPK/strings.xml index 4df6544b..b248b5de 100644 --- a/app/src/main/res/values-ur-rPK/strings.xml +++ b/app/src/main/res/values-ur-rPK/strings.xml @@ -441,4 +441,9 @@ اسکرین شاٹ جس میں اینڈروئیڈ اسٹوڈیو میں نیا پروجیکٹ بٹن دکھایا گیا ہے۔ اسکرین شاٹ جس میں پروجیکٹ سیٹ اپ کے دوران سرگرمی کی قسم کا انتخاب دکھایا گیا ہے۔ اسکرین شاٹ جس میں ایپ کا نام، پیکج، زبان اور کم سے کم SDK کے فیلڈ دکھائے گئے ہیں۔ - \ No newline at end of file + Networking + Retrofit + Fetch data + Make HTTP requests with Retrofit. + Retrofit is a type-safe HTTP client for Android and Java. This example fetches data from a web service. + diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index e144136b..72bea251 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -441,4 +441,9 @@ Ảnh chụp màn hình hiển thị nút Dự án mới trong Android Studio. Ảnh chụp màn hình hiển thị lựa chọn loại hoạt động khi thiết lập dự án. Ảnh chụp màn hình hiển thị các trường tên ứng dụng, gói, ngôn ngữ và SDK tối thiểu. - \ No newline at end of file + Networking + Retrofit + Fetch data + Make HTTP requests with Retrofit. + Retrofit is a type-safe HTTP client for Android and Java. This example fetches data from a web service. + diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 354e9786..ead553e1 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -441,4 +441,9 @@ 顯示 Android Studio 中新專案按鈕的螢幕截圖。 顯示在專案設定期間選擇活動類型的螢幕截圖。 顯示應用名稱、套件、語言和最低 SDK 欄位的螢幕截圖。 - \ No newline at end of file + Networking + Retrofit + Fetch data + Make HTTP requests with Retrofit. + Retrofit is a type-safe HTTP client for Android and Java. This example fetches data from a web service. + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index eab3e527..a0d61128 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -464,4 +464,9 @@ Screenshot showing the New project button in Android Studio. Screenshot showing activity type selection during project setup. Screenshot showing fields for app name, package, language, and minimum SDK. - \ No newline at end of file + Networking + Retrofit + Fetch data + Make HTTP requests with Retrofit. + Retrofit is a type-safe HTTP client for Android and Java. This example fetches data from a web service. + diff --git a/app/src/main/res/xml/preferences_android_studio.xml b/app/src/main/res/xml/preferences_android_studio.xml index 6e2132b8..05813c81 100644 --- a/app/src/main/res/xml/preferences_android_studio.xml +++ b/app/src/main/res/xml/preferences_android_studio.xml @@ -321,6 +321,19 @@ android:targetPackage="com.d4rk.androidtutorials.java" /> + + + + + diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7478a0b6..2c942648 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -31,6 +31,7 @@ codeview = "1.3.9" hilt = "2.57.1" room = "2.7.2" glide = "5.0.4" +retrofit = "2.11.0" [libraries] aboutlibraries = { module = "com.mikepenz:aboutlibraries", version.ref = "aboutlibraries" } @@ -73,3 +74,5 @@ androidx-room-runtime = { module = "androidx.room:room-runtime", version.ref = " androidx-room-compiler = { module = "androidx.room:room-compiler", version.ref = "room" } glide = { module = "com.github.bumptech.glide:glide", version.ref = "glide" } glide-compiler = { module = "com.github.bumptech.glide:compiler", version.ref = "glide" } +retrofit2 = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofit" } +retrofit2-converter-gson = { module = "com.squareup.retrofit2:converter-gson", version.ref = "retrofit" }