春天前销销售 - 保存一切。所有视频。所有书籍。 现在50%的折扣。

建立您的移动发展技能并保存!通过终极书籍和视频订阅,继续前进。作为春季前销销售的一部分,仅为149美元/年。

首页 安卓& 开奖结果3d Tutorials

kotlin. for Android:介绍

了解Android的开奖结果3d如何制作开发Android应用程序的更远。了解它是如何简单的,通过创建自己的书籍搜索应用程序。

4.8/5 34个评分

版本

  • kotlin. 1.3,Android 4.4,Android Studio 3

更新注释:Matei Suica更新到此教程到Android Studio 3.3。 Joe Howard制作了以前的更新,Eunice Obugyei写了原始教程。

在2017年之前,Android应用程序开发人员几乎完全使用了Java 6编程语言,并支持以下内容。 Java 6于2006年推出,在Android设备发布前两年推出。

码头 开发了Intellij Idea,这是Android Studio的基础。 2011年,公司介绍了 kotlin. 语言,但很少有Android开发人员开始使用它。虽然开奖结果3d准备好了,但语言不稳定。当语言的重要变化发生时,开发人员必须更改其代码库。五年后,科特林释放1.0。感谢所有早期的采用者,为这个伟大的时刻!

在Google I / O 2017中,Google宣布Android将支持开奖结果3d作为一流的编程语言从现在开始。为此,Android Studio(AS)的3.0发布于框中的集成开奖结果3d支持!以下三个次要版本继续改善开奖结果3d支持和可用的工具。

kotlin.是一种静态类型的现代编程语言,通过将开奖结果3d代码编译为Java字节代码,在Java虚拟机(JVM)上运行。它也可以编译为JavaScript源代码和本机可执行文件。 开奖结果3d是灵活的,有一些很酷的功能!

在这个适用于Android教程的开奖结果3d,您将学习:

  • 如何设置kotlin环境。
  • 如何在同一项目中使用Java和开奖结果3d。
  • 是什么让kotlin如此令人兴奋的是一种新语言。
笔记:本教程假设您在Android开发中遇到了Java。如果您是Android World的新手或有关Starter项目的大问题,请查看其他 安卓tutorials。对于本教程,您需要Android Studio 3.3或更高版本。

为什么开奖结果3d for Android?

由于Android以Storm推动了世界,开发人员对App开发的杰瓦有很少的替代方案。 Java是在其专有操作系统上使用最高级手机的编程语言,以便在其专有操作系统上运行其本机应用程序。例如,诺基亚的Symbian有Java Me Apps。虽然它的用法很普遍,但Java附带了很多历史行李。

Java 8通过Java 9和10解决了一些语言问题甚至更多。不幸的是,您必须将最小SDK设置为Android 24以使用所有Java 8的功能,这不是许多开发人员的选项。 Android Ecosystem的碎片使得不可能将用户与旧设备留出。对于大多数开发人员来说,Java 9和10甚至不是在雷达上。

kotlin.是Android的现代编程语言解决方案。有一些东西让开奖结果3d适合Android:

  1. 兼容性:它与JDK 6兼容,所以较旧的设备不会留下。
  2. 表现:它与Java相提并论。
  3. 互操作性:它是100%与Java互操作,包括注释。
  4. 脚印:开奖结果3d的运行时库很小。
  5. 编译时间:干净的构造有一点开销,但增量构建速度更快。
  6. 学习曲线:很容易学习,特别是对于习惯现代语言的人。 intellij和Android Studio中的java到开奖结果3d Converter,使其更加容易。您还可以使用一个项目中的kotlin和java混合,因此携带时间学习开奖结果3d并在您感到舒适时添加它。

虽然Java 8现在支持最近的Android版本,最近的开发人员 调查 说开奖结果3d正在赢利。领域团队指出,“开奖结果3d即将改变整个Android生态系统。” 开奖结果3d现在是其中最受欢迎的编程之一。它准备支配Android应用程序开发。最重要的是,这是一种新语言!什么可能更令人兴奋? iOS开发人员在2014年享受了兴趣。现在轮到你了。 :]

入门

对于本教程,您将通过使用允许用户搜索书籍的应用程序来探索开奖结果3d,请参阅书籍封面并与朋友分享书籍。

使用该材料下载 下载 Materials 此页面顶部或底部的按钮。在Android Studio 3.3或更高版本中提取并打开Starter项目。

它包含用java编写的三个源代码文件:

  • mainactivity.java.: An 活动 that displays the screen for searching and displaying a list of books.
  • Deveryactity.java.: An 活动 that displays the book cover for the ID passed to it.
  • jsonadapter.java.: A custom BaseAdapter that transforms a JSON object into a list view item.

构建并运行项目以查看您使用的内容。

第一件事首先:输入您的姓名,以便该应用程序可以迎接您! :]

之后,开始搜索您感兴趣的书籍。在字段中键入书籍或作者名称,然后单击 搜索 获得书籍清单。

单击一行将您带到第二个屏幕,在那里您将拥有完整的封面来欣赏。它不是很酷吗?

设置您的环境

安卓Studio 3.3及以后支持开奖结果3d就在框中。您创建的任何新项目都将使用开奖结果3d。创建新活动时将语言设置为开奖结果3d。您无需为本辅导创建一个项目,因为它被提供为上面的Starter项目:

弹出窗口将鼓励您在Android Studio 3.3中更新您的开奖结果3d插件,只要新版本都可提供。您可以随时单击查看插件屏幕上的开奖结果3d插件版本 命令+ shift + a 和打字 插件。类型 kotlin. 进入搜索框并检查右侧的版本:

一起使用Java和开奖结果3d

kotlin.最惊人的品质之一是它可以与Java共存。 Java代码可以调用开奖结果3d代码,反之亦然。您甚至可能不会注意到您正在调用另一种语言的代码!

从这一点前进,你将翻译 细节 进入开奖结果3d。

Single click com.raywenderlich.android.omgandroid 在里面 Project panel on the left-hand side. With the package selected, go to 文件▸新▸kotlin文件/类 创建一个新的kotlin类。如果没有选中包,则不会看到kotlin文件选项。

在这一点 新kotlin文件/类 弹出,选择 班级 在里面 种类 场和进入 详细信息科洛林 作为类名。点击 好的.

intro_to_kotlin_17.

你的新课程应该如下所示:

    
package com.raywenderlich.android.omgandroid

class DetailActivity开奖结果3d {
}

几件事要注意:

  1. Declare 开奖结果3d classes using the keyword class — just like in Java.
  2. 经过 default, if no visibility modifier is present in 开奖结果3d, the item is public.
  3. 班级es and methods are final by default. Declare them open if you want to inherit classes and override methods.

由于开奖结果3d和Java是可互操作的,因此您可以在开奖结果3d代码文件中使用现有的Java框架和库。

让课程成为一个子类 AppCompatactivity.:

  
class DetailActivity开奖结果3d : AppCompatActivity() {

}

如果需要,请单击 选项+ Return. to import classes such as AppCompatactivity.. Android Studio will usually add the import statements for you if there are no conflicts.

从java,在kotlin,你附加 :nameofparentclass() 到子类声明。尾随括号适用于父类上的构造函数。

现在覆盖 活动s oncreate() 方法。它看起来像这样:

  
import android.app.Activity
import android.os.Bundle

class DetailActivity开奖结果3d: Activity() {

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
  }
}
笔记:您可以使用Android Studio的代码生成功能来生成 oncreate. 方法。按 控制+ O. to see a popup with all overridable methods for the class you’re in and choose oncreate..

intro_to_kotlin_18

打开 mainactivity.java. 和 replace the 细节 reference in onItemClick() with 详细信息科洛林.

您的意图创建行应改变:

  
Intent detailIntent = new Intent(this, DetailActivity.class);

为此:

  
Intent detailIntent = new Intent(this, DetailActivity开奖结果3d.class);

有些事情永远不会变

正如您对Java活动的那样,您需要宣布您的开奖结果3d活动 和roidmanifest.xml.xml.。在下面添加以下代码 细节 在里面的宣言 应用 tag:

<activity
    android:name=".DetailActivity开奖结果3d"
    android:label="@string/activity_details_kotlin"
    android:parentActivityName=".MainActivity">
  <meta-data
      android:name="和roid.support.PARENT_ACTIVITY"
      android:value=".MainActivity"/>
</activity>

Working with XML files in general hasn’t changed including 和roidmanifest.,布局文件,样式和资源。无论活动的编程语言如何,如果您没有在清单中注册,您的应用程序将崩溃!

建立和运行。从列表中选择一本书,以查看具有标题的空屏幕 kotlin.书籍详情.

kotlin.有多酷?

在深入进入开奖结果3d的功能之前,请回去 详细信息科洛林.kt. 并用以下内容替换文件的内容:

  
package com.raywenderlich.android.omgandroid

import android.content.Intent
import android.os.Bundle
import android.support.v4.view.MenuItemCompat
import android.support.v7.app.AppCompatActivity
import android.view.Menu
import android.widget.ImageView
import android.support.v7.widget.ShareActionProvider
import com.squareup.picasso.Picasso

class DetailActivity开奖结果3d : AppCompatActivity() {

  private val imageUrlBase = "http://covers.openlibrary.org/b/id/"
  private var imageURL = ""
  private var shareActionProvider: ShareActionProvider? = null

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    setContentView(R.layout.activity_detail)

    actionBar?.setDisplayHomeAsUpEnabled(true)

    val imageView = findViewById<ImageView>(R.id.img_cover)

    val coverId = this.intent.extras.getString("coverID")

    val len = coverId?.length ?: 0

    if (len > 0) {
      imageURL = imageUrlBase + coverId + "-L.jpg"
      Picasso.with(this).load(imageURL).placeholder(R.drawable.img_books_loading).into(imageView)
    }
  }

  private fun setShareIntent() {

    val shareIntent = Intent(Intent.ACTION_SEND)
    shareIntent.type = "text/plain"
    shareIntent.putExtra(Intent.EXTRA_SUBJECT, "Book Recommendation!")
    shareIntent.putExtra(Intent.EXTRA_TEXT, imageURL)

    shareActionProvider?.setShareIntent(shareIntent)
  }

  override fun onCreateOptionsMenu(menu: Menu): Boolean {

    menuInflater.inflate(R.menu.main, menu)

    val shareItem = menu.findItem(R.id.menu_item_share)

    shareActionProvider = MenuItemCompat.getActionProvider(shareItem) as ShareActionProvider

    setShareIntent()

    return true
  }
}

在表面上,代码类似于Java,但有一些开奖结果3d语言细节将在下一节中进入。

构建和运行,选择一本书,看看这次是否得到封面。哦,看,你做!

声明变量

在开奖结果3d中声明变量很简单明了。尽可能呈现表达,您必须熟悉所有开奖结果3d可以在变量方面无法做到的。以下是您通常使用的一些变量声明:

var item = "house"
val points = 35

var car: String = "BMW"

What’s the difference between valvar? You can’t later reassign variables that you declare with val. Doing so triggers a compiler error. But you can with var. This is the difference between the two.

points = 36

You’ve already said you only have 35 points, so don’t try to cheat! This way of declaring variables is similar to Java’s final.

The other thing that’s different in the last declaration is that there’s also a variable type. In 开奖结果3d, type inference works quite well. That’s why most of the time you don’t need to explicitly declare the type of a variable. As you’ll see later, you must do this when it comes to Optional type, which can be null. For the car variable above, the type isn’t necessary, but it’s nice to let the 开奖结果3d compiler know that it’s a String and will never be something else.

var highScore = points + 999

As you can see, 开奖结果3d can figure out by itself that highScore is an integer here.

无效

A common frustration with programming languages is accessing a member of a null reference. A null reference occurs when you declare an object variable without giving it a value, or when you assign null to that variable. When the program runs and tries to access that variable, it doesn’t know where to look because it doesn’t exist.

最常见的结果是您的申请突然停止并崩溃。您可能熟悉Java的全能性 空指针异常。为任何刷背部提前道歉。 :]

空指针异常

kotlin.最大的功能之一是其类型系统旨在消除 空指针异常,一个人称为 空虚.

在开奖结果3d,可能的原因 空指针异常 are:

  • 外部Java代码。
  • An explicit call to throw NullPointerException() (NPE).
  • Usage of the operator.
  • A lateinit var not initialized before access.

可用类型和非空类型

kotlin有 可用的非零 类型。如果您没有将变量声明为可为空,则无法将其分配为空值。编译器强制执行此操作,使无意中崩溃您的应用程序更难。

In contrast to Java, all variables must be initialized at the point of declaration, in a constructor or in a init, except lateinit var.

要将变量声明为可用的,您必须附加一个 ? 在声明点的类型,如下所示 ShareActionProvider. declaration:

  
private var shareActionProvider: ShareActionProvider? = null

延迟初始化变量

Late initialization variables are the developer’s promise that they will initialize the variable before accessing it. This is one of the most common NPE causes. To declare a variable without initializing it in the constructor or an init block, prepend lateinit:

class SomeClass {
  private lateinit var myName: String

  fun methodThatAccesses() {
    myName.trim()
  }

  fun methodThatAssigns() {
    myName = "initialize the variables!"
  }
}

Now, if you were to call methodThatAccesses first, the app would crash. You promised that you’d initialize myName before accessing it and you didn’t. On the other hand, if you called methodThatAssigns first, there would be no crash.

This can be useful when you have something you know for sure you’ll initialize in time but you can’t do it in the constructor or in an init block. In Android, 意见 are assigned in the oncreate() method. If you need one of the views to be a class member and don’t want to deal with nullability everywhere, it makes sense to declare it lateinit.

安全电话

To access a property or method on a nullable variable in Java, you would first do a null check. You can see this in Deveryactity.java.:

if (shareActionProvider != null) {
  shareActionProvider.setShareIntent(shareIntent);
}

使用开奖结果3d,您可以使用安全呼叫运算符简化上述表达式 ?。。只有当可空变量是时,才会调用属性或方法 没有空.

  
shareActionProvider?.setShareIntent(shareIntent)

Here, setShareIntent is only called when the ShareActionProvider. property is not null.

这 !!操作员

如前所述,该运营商是可怕的可能原因之一 空指针异常。如果您确定可按空缺,则无效,请随时使用 操作员解除您的对象。

You can see an example of this in setShareIntent():

shareActionProvider = MenuItemCompat.getActionProvider(shareItem!!) as ShareActionProvider

在这里,答: 空指针异常 被抛出如果是 分享人 variable is null.

埃尔维斯运营商

elvis运算符(?:)看起来像Java中的三元条件运算符,但有效地有效。它看起来像Elvis Presley的头发如果你向左倾斜90度:]你可以在试图获得封面ID的长度时看到一个示例:

val len = coverId?.length ?: 0

If the expression to the left of the Elvis operator is not null, it returns the result of the expression. Otherwise, it returns the expression to the right.

Similarly to an if-else statement, Elvis only evaluates the expression on the right if the one on the left side is null. The equivalent would be:

  val len: Int
  if(coverId?.length != null) {
    len = coverId?.length
  } else {
    len = 0
  }

这是kotlin的方式缩短,不是吗?

类型推断

kotlin. also supports type inference. This means the compiler can deduce variable types from the initializer. You can still declare the type if you want or if the compiler can’t infer it. For example, the types of the imageUrlBaseimageURL variables are inferred from their initializers.

  
private val imageUrlBase = "http://covers.openlibrary.org/b/id/"
private var imageURL = ""

The compiler tracks the inferred type of each variable, each as a String. Any values assigned after that to the variable must also be of that String type. For numbers, you need to make the type of variable clear to the compiler.

    var longVar = 0L
    var floatVar = 0.0f
    var doubleVar = 0.0
    var integerVar = 0

java到kotlin转换器

我喜欢把这个工具称为kotlinifier。不幸的是,Jetbrain团队并不试图变得好笑。尽管如此,转换器是有史以来最好的工具,以便从一个编程语言到另一个编程语言的转换。

由于开奖结果3d由开发人员为开发人员制作,他们知道用户想要的语言。这些工具是语言开发人员团队曾经从Java转换为开奖结果3d。这就是转换器太好的原因!

试试看。通过转换测试驱动器来进行这款Sanity节省功能 Deveryactity.java. file to 开奖结果3d.

打开 Deveryactity.java. 班级去 代码▸将Java文件转换为kotlin文件 或使用快捷方式 命令+ shift +选项+ k:

您将收到一个如图所示的通知,请单击 好的。这将用开奖结果3d One替换Java文件。然而,此通知仅在必要时显示,因此并不总是期待它。

intro_to_kotlin_14.

而已。您已将Java类转换为开奖结果3d类。 :]

Compare the converted 细节 with the 详细信息科洛林 class. Pay attention to the choices the converter made. It doesn’t always make the best choices, but it does produce working code. Always review the converted code when you use this feature. You can even learn language features from the converter!

Now, reset MainActivity to refer to the converted code:

Intent detailIntent = new Intent(this, DetailActivity.class);

Build and run and go to the detail screen, and you’ll see the converted code works as well as the code you had in 详细信息科洛林. :]

kotlin.正在发展

虽然其他编程语言已经达到了成熟,但开奖结果3d仍然处于起步性。最新版本现在是1.3,它具有很多新功能。一些特征已经是语言作为实验特征,有些则是新的。有些人也改进了已经存在的构建。以下是您应该了解的一些亮点。

金属卷曲

金属卷曲是开奖结果3d的更高级功能,允许开发人员运行异步代码。您现在可能不了解考文录,但值得一提的是该功能现在稳定。如果您需要运行非阻塞的代码,请退房 金属卷曲.

Improvements to when expression

kotlin.’s equivalent to Java’s switch is when. In 开奖结果3d 1.3, the when subject can be captured on the spot. You no longer need to assign a val right before the block.

when (val response = executeRequest()) {
            is Success -> response.body
            is HttpError -> throw HttpException(response.status)
        }

更多的数字

对于某些应用程序,使用未签名的数字类型是有意义的。退出路程为新的可能性提供空间。 开奖结果3d 1.3带回了旧的 无符号 concept: UByte, UShort, UIntULong are all new and experimental. Use them carefully!

IDE中的代码样式支持

记住Java编码约定吗?是的,我既不是。 开奖结果3d有一个非常坚实的编码约定文件,所有开奖结果3d开发人员应该读,学习和追随虔诚。这就是为什么你现在可以设置基于Intellij的IDE来格式化代码开奖结果3d的方式而不是其默认值。这将有助于您保持代码很好,尊重这些建议。

kotlin. 1.3中有更多的变化。要检查一下,去 更改兴。一旦你在kotlin的艺术中更进一步,你就会惊讶于这些添加有用。

然后去哪儿?

恭喜!你已经学到了很多关于开奖结果3d的很多!您在开奖结果3d中重新编码了Java活动,并使用开奖结果3d插件将Java源文件转换为开奖结果3d源文件。找到最终项目并通过点击来比较您的结果 下载材料 本教程顶部或底部的按钮。

我建议进一步阅读 kotlin中的空安全 在文档中。

你也可以使用 kotlin.在线编译器 试用代码样本并提高您对语言的知识。

你只划伤了开奖结果3d的惊人可能性的表面。如果你在这里阅读的内容是兴奋的,请查看其他kotlin主题。有很多东西要了解 数据类, 延期, lambdas., 或者 字符串模板.

我希望你喜欢这个开奖结果3d for Android教程。如果您有任何疑问或意见,请加入下面的论坛讨论!

平均评级

4.8/5

为此内容添加评级

34 ratings

更像这样的

贡献者

注释