LibCode
Kotlin: Как вывести данные для проверки
При написании приложения может потребоваться проверить данные, как они были обработаны. Для этого, за частую, достаточно их просто увидеть. В этом нам поможет класс Gson. Чтобы его использовать, необходимо импортировать:
Если, по каким то причинам его у вас до сих пор нет, добавляем в "build.gradle.kts":
После чего, если потребуется, пересоберите проект. И выводите нужные данные так:
В лог выводим так:
Импорт логирования:
В логе увидите строку с данными.
...
ВыделитьKotlin
import android.util.LogЕсли, по каким то причинам его у вас до сих пор нет, добавляем в "build.gradle.kts":
ВыделитьKotlin
implementation("com.google.code.gson:gson:xx.xx.xx")xx.xx.xx: Указывайте актуальную версию.
После чего, если потребуется, пересоберите проект. И выводите нужные данные так:
ВыделитьKotlin
Gson().toJson(data)В лог выводим так:
ВыделитьKotlin
Log.d("Data", Gson().toJson(data))Импорт логирования:
ВыделитьKotlin
import android.util.LogВ логе увидите строку с данными.
...
- Жалоба
Kotlin: Разница между app.R и com.google.android.material.R
Разработчики Android нередко сталкиваются с путаницей относительно использования различных версий класса
Класс R представляет собой специальную структуру, автоматически создаваемую Android Studio во время процесса сборки проекта. Он служит контейнером ссылок на ресурсы вашего приложения (изображения, цвета, стили, макеты и т.д.). Каждый ресурс автоматически получает уникальный числовой идентификатор, хранящийся в соответствующих полях класса
Классы R бывают двух типов:
Что это?Это...
R, особенно когда речь идет о доступе к ресурсам своего приложения и сторонних библиотек. Эта статья поможет разобраться в разнице между app.R и com.google.android.material.R, а также научит правильно обращаться к нужным ресурсам.Что такое классы R?
Класс R представляет собой специальную структуру, автоматически создаваемую Android Studio во время процесса сборки проекта. Он служит контейнером ссылок на ресурсы вашего приложения (изображения, цвета, стили, макеты и т.д.). Каждый ресурс автоматически получает уникальный числовой идентификатор, хранящийся в соответствующих полях класса
R.Классы R бывают двух типов:
- Ваш собственный класс
R, называемыйapp.R, соответствует ресурсам вашего проекта. - Класс R сторонней библиотеки, обозначаемый именем пакета библиотеки (например,
com.google.android.material.R), содержит ссылки на ресурсы конкретной внешней библиотеки.
app.R
Что это?Это...
PHP: Как определить тип HTTP-запроса (POST или GET)
Определить тип HTTP-запроса (POST или GET) в PHP можно несколькими способами:
Использование суперглобального массива $_SERVER
Использование константы PHP_SAPI (менее надёжный способ)
Через функцию filter_input
...
Основные способы определения метода запроса
Использование суперглобального массива $_SERVER
ВыделитьPHP
$method = $_SERVER['REQUEST_METHOD'];
if ($method === 'GET') {
// Обработка GET-запроса
} elseif ($method === 'POST') {
// Обработка POST-запроса
}Использование константы PHP_SAPI (менее надёжный способ)
ВыделитьPHP
if (php_sapi_name() === 'cgi-fcgi' && $_SERVER['REQUEST_METHOD'] === 'POST') {
// POST-запрос
}Через функцию filter_input
ВыделитьPHP
$method = filter_input(INPUT_SERVER, 'REQUEST_METHOD');Практическое применение
ВыделитьPHP
switch ($_SERVER['REQUEST_METHOD']) {
case 'GET':
// Обработка GET-запроса
$data = $_GET;
break;
case 'POST':
// Обработка POST-запроса
$data = $_POST;
break;
default:
http_response_code(405); // Метод не разрешён
echo 'Метод запроса неKotlin: Корутины (coroutines)
Корутины (coroutines) — это механизм в Kotlin, который позволяет писать асинхронный и неблокирующий код в стиле синхронного программирования. Корутины упрощают работу с асинхронными задачами, такими как сетевые запросы, работа с базами данных и другие длительные операции, без необходимости использования сложных конструкций, таких как коллбэки или потоки.
Асинхронность: Корутины позволяют выполнять длительные операции асинхронно, не блокируя основной поток.
Неблокирующий код: Корутины могут приостанавливаться и возобновляться без блокировки потока, что делает их эффективными для выполнения длительных операций.
Легкость в использовании: Корутины позволяют писать асинхронный код в стиле синхронного программирования, что упрощает чтение и понимание кода.
Пример использования корутин
...
Основные особенности корутин
Асинхронность: Корутины позволяют выполнять длительные операции асинхронно, не блокируя основной поток.
Неблокирующий код: Корутины могут приостанавливаться и возобновляться без блокировки потока, что делает их эффективными для выполнения длительных операций.
Легкость в использовании: Корутины позволяют писать асинхронный код в стиле синхронного программирования, что упрощает чтение и понимание кода.
Пример использования корутин
ВыделитьKotlin
import kotlinx.coroutines.*
fun main() = runBlocking {
println("Start")
// Запуск корутины
launch {
delay(2000) // Приостановка корутины на 2Kotlin: Как осуществляется переход от списка к ID (Использование XML макетов)
Для примера возьмём список чатов и один чат, к которому будем писать код, чтобы перейти.
Для реализации перехода между списком чатов и конкретным чатом в Kotlin/Android, можно использовать следующий подход:
Список чатов (ChatListActivity/Fragment):
Activity/Fragment чата (ChatActivity):
...
Для реализации перехода между списком чатов и конкретным чатом в Kotlin/Android, можно использовать следующий подход:
Список чатов (ChatListActivity/Fragment):
ВыделитьKotlin
// При клике на элемент списка
chatList.setOnItemClickListener { parent, view, position, id ->
val chatId = chatList[position].id // Получаем id чата
// Создаем Intent для перехода
val intent = Intent(this, ChatActivity::class.java)
intent.putExtra("chat_id", chatId) // Передаем id чата
startActivity(intent)
}Activity/Fragment чата (ChatActivity):
ВыделитьKotlin
class ChatActivity : AppCompatActivity() {
private var chatId: Int = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_chat)
// Получаем переданный id чата
chatId = intent.getIntExtra("chat_id", 0)
// Теперь