国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

[Kotlin]手把手教你寫一個安卓APP(第一章注冊登錄)

這篇具有很好參考價值的文章主要介紹了[Kotlin]手把手教你寫一個安卓APP(第一章注冊登錄)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

開發(fā)軟件:Android Studio

1.創(chuàng)建項目默認(rèn)選擇Empty Activity

[Kotlin]手把手教你寫一個安卓APP(第一章注冊登錄)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?點擊Next

?2.生成項目設(shè)置包名選擇開發(fā)語言(這里我用的是kotlin)

[Kotlin]手把手教你寫一個安卓APP(第一章注冊登錄)

?在生成項目后我們要做的就是添加需要的配置打開我們的app目錄下的build.gradle去添加我們所要用到的依賴庫這次我們會用到一個儲存庫MMKV

dependencies {
    implementation 'com.tencent:mmkv-static:1.0.23'
}

別忘了我們還要在項目層build.gradle中配置阿里云鏡像

apply from: "config.gradle"
buildscript {
    ext.kotlin_version = '1.4.31'

    repositories {
        mavenCentral()
        google()
        maven { url "https://jitpack.io" }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:4.0.2'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        mavenCentral()
        google()
        maven { url "https://jitpack.io" }
        maven { url "https://s01.oss.sonatype.org/content/groups/public" }
        maven {url 'http://maven.aliyun.com/nexus/content/groups/public/'}

    }
    /*Partial dependency libraries introduce existing dependencies, which are handled in the following way in order to unify their versions*/

    configurations.all {

        resolutionStrategy.eachDependency { details ->
            def requested = details.requested
            if (requested.group == 'org.jetbrains.kotlin') {
                if (requested.name.startsWith("kotlin-stdlib")) {
                    details.useVersion '1.4.31'
                }
            }
        }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

所有配置完成后

?3.項目生成后會默認(rèn)進(jìn)入到MainActivity中如圖

[Kotlin]手把手教你寫一個安卓APP(第一章注冊登錄)

這樣我們就可以開始寫代碼了 因為我們要寫一個登錄&注冊一體的功能 所以這里我重新創(chuàng)建一個LoginActivity用來登錄使用 將MainActivity用來登錄成功后跳轉(zhuǎn)的指向頁面

4.畫一個登錄注冊頁面(activity_login.xml)

簡單效果圖

[Kotlin]手把手教你寫一個安卓APP(第一章注冊登錄)

上圖代碼

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/dp_16"
    android:paddingTop="@dimen/dp_16"
    android:paddingRight="@dimen/dp_16"
    android:paddingBottom="@dimen/dp_16"
    tools:context=".ui.LoginActivity">

    <EditText
        android:id="@+id/username"
        android:layout_width="@dimen/dp_0"
        android:layout_height="wrap_content"
        android:layout_marginStart="@dimen/dp_24"
        android:layout_marginTop="@dimen/dp_96"
        android:layout_marginEnd="@dimen/dp_24"
        android:hint="@string/prompt_email"
        android:inputType="textEmailAddress"
        android:selectAllOnFocus="true"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/password"
        android:layout_width="@dimen/dp_0"
        android:layout_height="wrap_content"
        android:layout_marginStart="@dimen/dp_24"
        android:layout_marginTop="@dimen/dp_8"
        android:layout_marginEnd="@dimen/dp_24"
        android:hint="@string/prompt_password"
        android:imeActionLabel="@string/action_sign_in_short"
        android:imeOptions="actionDone"
        android:inputType="textPassword"
        android:selectAllOnFocus="true"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/username" />

    <Button
        android:id="@+id/login"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="start"
        android:layout_marginStart="@dimen/dp_48"
        android:layout_marginTop="@dimen/dp_16"
        android:layout_marginEnd="@dimen/dp_48"
        android:layout_marginBottom="@dimen/dp_64"
        android:text="@string/action_sign_in"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/password"
        app:layout_constraintVertical_bias="0.2" />
    
</androidx.constraintlayout.widget.ConstraintLayout>

?5.代碼實現(xiàn)登錄注冊并保存賬號密碼跳轉(zhuǎn)MainActivity頁面

package com.example.htkotlinmvvmdemo1.ui

import android.os.Bundle
import androidx.activity.viewModels
import androidx.lifecycle.lifecycleScope
import com.caspar.base.base.BaseActivity
import com.caspar.base.ext.acStart
import com.caspar.base.utils.MMKVUtil
import com.example.htkotlinmvvmdemo1.config.Constant.LOGINUSERNAME
import com.example.htkotlinmvvmdemo1.databinding.ActivityLoginBinding
import com.example.htkotlinmvvmdemo1.ui.viewmodel.LoginViewModel
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch


/**
 *  "ht" 創(chuàng)建 2021/12/23
 *   界面名稱以及功能: 登錄界面
 */
class LoginActivity : BaseActivity<ActivityLoginBinding>() {
    private val loginViewModel: LoginViewModel by viewModels()

    override fun initView(savedInstanceState: Bundle?) {
        //判斷賬號不為空證明已經(jīng)注冊過了這是點擊退出后跳回登錄界面 默認(rèn)將存儲的賬號顯示出來當(dāng)然也可以不寫
        if (MMKVUtil.decodeString(LOGINUSERNAME).isNotEmpty()) {
            mBindingView.username.setText(MMKVUtil.decodeString(LOGINUSERNAME))
        }
        mBindingView.apply {

            //這里實現(xiàn)點擊登錄后的處理
            mBindingView.login.setOnClickListener {
                //kotlin的語法很簡潔 這里的意思是我們將輸入的賬號密碼進(jìn)行判斷不為空即走下面的跳轉(zhuǎn)方法
                if (loginViewModel.userEmpty(
                        mBindingView.username.text.toString(),
                        mBindingView.password.text.toString()
                    )
                ) {
                    //kotlin協(xié)程實現(xiàn)2秒延遲跳轉(zhuǎn)
                    lifecycleScope.launch {
                        showDialog()
                        delay(2000)
                        stopDialog()
                        acStart<MainActivity>()
                        finish()
                    }

                }
            }
        }
    }


    override fun initIntent() {

    }
}

?我這里用的是mvvm架構(gòu) 所以我在貼一下這里的LoginViewModel

package com.example.htkotlinmvvmdemo1.ui.viewmodel

import android.app.Application
import com.caspar.base.base.BaseViewModel
import com.example.htkotlinmvvmdemo1.config.Constant
import com.caspar.base.utils.MMKVUtil

/**
 *  "ht" 創(chuàng)建 2021/12/23
 *   界面名稱以及功能: 登錄界面
 */
class LoginViewModel(application: Application) : BaseViewModel(application) {
    fun userEmpty(userName: String, userPassword: String): Boolean {
        //這里的意思是用戶名或者密碼如果有一個為空就返回false并提示(當(dāng)然我們也可以添加其他判斷比如只能輸入數(shù)字等等我們這里就不多判斷了懂就行)
        return if (userName.isEmpty() || userPassword.isEmpty()) {
            toast("賬號密碼不能為空")
            false
        } else {
            //這里的意思是用戶名和密碼都不為空就保存下來并返回true后執(zhí)行延遲跳轉(zhuǎn)(這里我將  MMKV封裝了我會貼在下面的)
            MMKVUtil.encode(Constant.LOGINUSERNAME, userName)
            MMKVUtil.encode(Constant.LOGINPASSWORD, userPassword)
            true
        }
    }


}

這樣我們就已經(jīng)實現(xiàn)了簡單的登錄注冊了 當(dāng)然我們app一般會有啟動頁 然后配合啟動頁去判斷有沒有注冊過 如果注冊過我們可以通過MMKV獲取儲存的賬號密碼直接登錄不需要在跳到登錄界面,如果你會問那怎么退出呢 當(dāng)然我們可以儲存那也可以刪除 只要在app里添加退出登錄 將賬號密碼清空跳到登錄界面重新注冊登錄,還可以在下次在登錄時我們判斷賬號密碼為空了 就跳到登錄界面重新注冊登錄

我里面用到ViewBinding并且封裝了BaseActivity大家可以去看我第二個文章直接復(fù)制至于協(xié)程用法后面我在梳理一下?

上面只是很簡單的一個登錄邏輯 相信大家都看得懂 主要是最基礎(chǔ)東西 可能更適合新手吧!

最后看看效果:

1.登錄驗證失敗

?[Kotlin]手把手教你寫一個安卓APP(第一章注冊登錄)

2.驗證通過延遲跳轉(zhuǎn)

[Kotlin]手把手教你寫一個安卓APP(第一章注冊登錄)

?3.登錄成功跳轉(zhuǎn)MainActivity

[Kotlin]手把手教你寫一個安卓APP(第一章注冊登錄)

 

至于最后一個截圖里能看到已經(jīng)做了很多demo里實現(xiàn)了 以下功能:

(1) room數(shù)據(jù)增刪改

(2)模糊搜索

(3)Motionlayout動畫布局

(4)相機(jī)相冊權(quán)限申請選擇并設(shè)置圓角等樣式

(5)骨架屏加載

(6)圖片中提取選中顏色

(7)RecyclerView多級顯示+吸頂

(8)CoordinatorLayout+AppBarLayout+CollapsingToolbarLayout基本使用

(9)Retrofit2+Coroutine(協(xié)程)+Flow實現(xiàn)網(wǎng)路請求加數(shù)據(jù)回調(diào)發(fā)送等等

(10)實現(xiàn)多語言切換

(10)集成高德地圖實現(xiàn)中英文切換 3D地圖等顯示以及基本配置

(11)一些好用得第三方庫如Player音樂播放器,BaseRecyclerViewAdapterHelper萬能適配, AgentWeb輕量級而且功能強大的 Web 庫

反正是很雜就是想到什么就試著寫寫玩也方便自己用得時候直接拿來用。

最后想說各位碼友可以q我大家多多交流?。。。。。。nd~文章來源地址http://www.zghlxwxcb.cn/news/detail-422932.html

到了這里,關(guān)于[Kotlin]手把手教你寫一個安卓APP(第一章注冊登錄)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 手把手教你寫stm32f103智能風(fēng)扇

    手把手教你寫stm32f103智能風(fēng)扇

    本系統(tǒng)可以分為兩個模式來進(jìn)行運行,分別為手動模式和自動模式,同時,在上電進(jìn)入系統(tǒng)后,還會有一個模式選擇的界面產(chǎn)生。 模式選擇:在此界面中,可以通過按鍵K1來控制模式選擇,兩個模式分別為手動模式和自動模式;通過按鍵K2可以進(jìn)入模式。 手動模式:在手動模

    2023年04月17日
    瀏覽(93)
  • 正則表達(dá)式詳解(零基礎(chǔ)教學(xué),手把手教你寫正則)

    本篇文章將從零講解什么是正則表達(dá)式,以及正則表達(dá)式的規(guī)則、在python中的應(yīng)用,用通俗易懂的描述方式進(jìn)行零基礎(chǔ)級別的講解,盡量做到全網(wǎng)最全講解,力求最高質(zhì)量文章,歡迎關(guān)注!點擊目錄可直接進(jìn)行相關(guān)位置跳轉(zhuǎn)。 目錄: 什么是正則? 為什么需要正則? 元字符

    2023年04月08日
    瀏覽(21)
  • 【Java】手把手教你寫學(xué)生信息管理系統(tǒng)(窗口化+MYSQL)

    【Java】手把手教你寫學(xué)生信息管理系統(tǒng)(窗口化+MYSQL)

    ? ? ? ? ? ? (本項目使用到了數(shù)據(jù)庫的可視化軟件DataGrip,需要同學(xué)們自行下載并配置環(huán)境) 首先我們需要在DataGrip中建立一個student的框架 ????????????????????????????????????????????????????????然后建立一個studenttable表? ? ? ? ? ? ? ? ? ?

    2024年02月04日
    瀏覽(29)
  • 手把手教你寫代碼——基于控制臺的通訊錄管理系統(tǒng)(單表)

    手把手教你寫代碼——基于控制臺的通訊錄管理系統(tǒng)(單表)

    本欄目專為入門java學(xué)習(xí)者設(shè)計的一些簡單的入門項目 本項目為簡單的基于控制臺的通訊錄管理系統(tǒng),所需要的環(huán)境僅僅為jdk以及mysql(版本不限)!只有一個簡單的eclipse軟件以及我們的mysql可視化工具(視頻使用navicat) 本項目數(shù)據(jù)庫表僅有一個,單表操作,方便學(xué)習(xí)! 本項

    2024年02月15日
    瀏覽(23)
  • FPGA之手把手教你寫串口協(xié)議解析(STM32與FPGA數(shù)據(jù)互傳)

    最近趁熱打鐵做了一個關(guān)于STM32與FPGA通信并且控制高速DA模塊產(chǎn)生不同頻率信號的正弦波、方波、三角波和鋸齒波的項目,從中收獲到了很多東西,也踩了一些雷和坑,將分為幾篇文章將整個過程分享出來。 這一次準(zhǔn)備分享的是對串口數(shù)據(jù)的解析和賦值。解析的數(shù)據(jù)由STM32發(fā)

    2024年02月06日
    瀏覽(27)
  • 數(shù)據(jù)結(jié)構(gòu):線性表————順序表的實現(xiàn)、項目和OJ題目(手把手教你寫代碼)

    數(shù)據(jù)結(jié)構(gòu):線性表————順序表的實現(xiàn)、項目和OJ題目(手把手教你寫代碼)

    ?? 個人主頁: 小新_- ??個人座右銘:“成功者不是從不失敗的人,而是從不放棄的人!”?? ??歡迎各位→點贊?? + 收藏?? + 留言?? ??所屬專欄:? 話說那些與C++的愛恨情仇 ? 歡迎訂閱,持續(xù)更新中~~~ ?? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ???讓小新帶著你

    2024年04月16日
    瀏覽(235)
  • QT初體驗:手把手帶你寫一個自己的串口助手

    QT初體驗:手把手帶你寫一個自己的串口助手

    本文記錄一下用QT Creator 寫一個基本功能齊全的串口助手的過程,整個工程只有幾百行代碼,跟著做下來對新手來說可以更快了解整個QT項目的開發(fā)過程和一些常用控件的使用方法。對新手學(xué)習(xí)QT能增強信心,話不多說,正文開始 先看成品: (1) 創(chuàng)建QMainWindow工程。這一步就不

    2024年02月05日
    瀏覽(87)
  • 基于STM32F103RCT6之手把手教你寫智能家居項目(2)

    基于STM32F103RCT6之手把手教你寫智能家居項目(2)

    ??????? 上一節(jié)我們簡述了智能家居項目,實現(xiàn)了點燈的相關(guān)代碼編寫,還有WIFI模塊的固件燒錄。 連接什么平臺: ??????? 我們想要遠(yuǎn)程控制家具的開關(guān)和獲取家中的狀態(tài),少不了一個可以傳輸數(shù)據(jù)的云平臺。我認(rèn)為易監(jiān)控是一個簡單好用的云平臺。 怎么連接平臺:

    2024年02月20日
    瀏覽(908)
  • 手把手教你做一個多路灰度傳感器

    手把手教你做一個多路灰度傳感器

    市面上有的灰度傳感器對于一些人來說可能不合適 ?于是呢不少人想自己做,比如我,當(dāng)時也是走了一些彎路的,現(xiàn)在把自己的經(jīng)驗寫上來,各位動手能力強的自己拿去用 原理: 左邊發(fā)射紅外光,地面反射到光敏三極管,改變A_OUTx處的電壓值,不同顏色和材質(zhì)對反射回來的

    2024年02月15日
    瀏覽(87)
  • 手把手教你用MindSpore訓(xùn)練一個AI模型!

    手把手教你用MindSpore訓(xùn)練一個AI模型!

    首先我們要先了解深度學(xué)習(xí)的概念和AI計算框架的角色( https://zhuanlan.zhihu.com/p/463019160 ),本篇文章將演示怎么利用MindSpore來訓(xùn)練一個AI模型。和上一章的場景一致,我們要訓(xùn)練的模型是用來對手寫數(shù)字圖片進(jìn)行分類的LeNet5模型 請參考( http://yann.lecun.com/exdb/lenet/ )。 圖1 M

    2024年02月04日
    瀏覽(33)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包