Kotlin入门配置与简单实战
16lz
2021-01-26
- 1插件安装
- 2配置kotlin
- 根目录下buildgradle
- app下的buildgradle
- 3运行程序
- 4其他小技巧
- 实现OnClickListener接口
- 实现网络请求
- onActivityResult回调
- Kotlin数值对象
- 实体类javaBean
- RecyclerView适配器
- 5参考文章
1、插件安装
File –> Setting –> Plugins –> Install JetBrains Plugins –> 搜索找到Kotlin并安装
安装完成后重启AS。
此时再新建类时就会多出两个选项。
2、配置kotlin
根目录下build.gradle
buildscript { ext.kotlin_version='1.0.6' repositories { jcenter() } dependencies { // kotlin配置 classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version" } }
这里有一个注意点:就是classpath的值,因为我们使用了kotlin_version这个变量,所以不能使用单引号括起来,一定得使用双引号。
app下的build.gradle
// kotlin插件apply plugin: 'kotlin-android'apply plugin: 'kotlin-android-extensions'ext.anko_version = '0.8.2' sourceSets { main.java.srcDirs += 'src/main/kotlin'//main目录下建立kotlin专用文件夹 }
dependencies{...compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"compile "org.jetbrains.anko:anko-sdk15:$anko_version"compile "org.jetbrains.anko:anko-support-v4:$anko_version"}
后来发现第一行的gradle依赖的作用在于intent的地方,如下代码
val intent = Intent(this,SelectPhotoActivity::class.java) startActivity(intent,)
这里的 .java,如果不加stdlib依赖,这里就一直报错,找不到 .java
3、运行程序
在kotlin文件夹下添加了和java下一样的package,然后在配置文件中把启动activity改成RunActivity
package com.xmliu.itravelimport android.os.Bundleimport android.support.v7.app.AppCompatActivityimport kotlinx.android.synthetic.main.activity_run.*class RunActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_run) runTV.text = "我是一个跑者" runTV.OnClick { toast(this,"敢点我,你完蛋了") } }}
最终运行结果,如图所示
4、其他小技巧
实现OnClickListener接口
class KotlinAboutActivity : Activity() , View.OnClickListener{ override fun onClick(view: View?) { when (view?.id) { R.id.aboutus_new_layout -> startActivity(Intent(this@KotlinAboutActivity, KotlinVersionHtmlActivity::class.java)) ... ... } } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_about) aboutus_new_layout.setOnClickListener(this) }}
使用this@KotlinAboutActivity 确认指向目标
lambda表达式,当就一个参数时,可以省略,用内部的it代替;当参数不使用时,可以用下划线_取代
实现网络请求
val result = URL("").readText()
以上一行代码在java里要写成以下一大段
public String getHttpStringWithGet(String urlStr) { StringBuffer sb = new StringBuffer(); String line; BufferedReader buffer = null; try { URL url = new URL(urlStr); HttpURLConnection urlConn = (HttpURLConnection) url .openConnection(); urlConn.setRequestMethod("GET"); urlConn.setUseCaches(false); urlConn.setConnectTimeout(5000); urlConn.setReadTimeout(50000); urlConn.connect(); buffer = new BufferedReader(new InputStreamReader( urlConn.getInputStream())); while ((line = buffer.readLine()) != null) { sb.append(line); } } catch (Exception e) { e.printStackTrace(); Log.i("TAG", e.getMessage()); JSONObject obj = new JSONObject(); try { obj.put("success", "false"); obj.put("reason", "无法连接到服务器"); } catch (JSONException e1) { e1.printStackTrace(); } return obj.toString(); } finally { try { if (buffer != null) buffer.close(); } catch (IOException e) { e.printStackTrace(); } } return sb.toString(); }
onActivityResult回调
在onActivityResult回调方法中,一定要注意把Intent的参数值添加?,这意味着该值可以为空,不然在用户取消操作时,程序会崩溃;同理于适配器adapter的convertView也需要加上问号
Kotlin数值对象
如下表格
类型 | 长度 |
---|---|
Double | 64 |
Float | 32 |
Long | 64 |
Int | 32 |
Short | 16 |
Byte | 8 |
实体类javaBean
data class User(val name: String, val age: Int)
RecyclerView适配器
这是借助了封装好的基类BaseRecycerAdapter,里面封装好了点击事件
class CalendarAdapter(context: Context, list: List<*>) : BaseKotlinRecyclerViewAdapter(context, list) { override fun onCreateViewLayoutID(viewType: Int): Int { return R.layout.item_travel_calendar_list } override fun onBindViewHolder(holder: RecyclerHolder, position: Int) { val item = list[position] as NoteBean holder.convertView.calendar_item_content.text = item.content } }
如果不借助的话,就像下面这样,参考这里
class MainAdapter(var context: Context, var data: Array<String>) : RecyclerView.Adapter<MainAdapter.MyViewHolder>() { override fun getItemCount(): Int { return data.size } override fun onBindViewHolder(holder: MyViewHolder, position: Int) { holder.itemView.tv_title.text = "标题:" holder.itemView.tv_content.text = data[position] } override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): MyViewHolder { return MyViewHolder(LayoutInflater.from(context).inflate(R.layout.listitem_main, parent, false)) } class MyViewHolder(itemView: View?) : RecyclerView.ViewHolder(itemView) }
5、参考文章
- Kotlin官网 http://kotlinlang.org/
- Kotlin官方博客 https://blog.jetbrains.com/kotlin/
- GitHub官方链接 https://github.com/JetBrains/kotlin
- Kotlin在线编辑器 https://try.kotlinlang.org
- 国内为数不多的关于Kotlin的视频讲解 https://github.com/enbandari/Kotlin-Tutorials
更多相关文章
- android studio使用Lambda表达式的正确姿势
- Android(安卓)Studio的插件开发
- 盘点android中常见的设计模式(九) -- Adapter/适配器模式
- 关于做Android+J2ee系统集成开发的一点心得【转】
- Android(安卓)进阶——上传Java项目及Android(安卓)AAR至JCenter
- Android(安卓)7.0动态权限大总结
- Android实现二维码扫描功能(一)-ZXing插件接入
- Android(安卓)Studio 翻译插件Translation和strings.xml多语言文
- Android中插件开发篇之----类加载器