linwoain的个人blog

知我者谓我心忧,不知我者谓我何求

0%

retrofit是现今流行的网络请求框架,现今有了kotlin协程的加持,如虎添翼,通常用法如下:
1、定义rest接口

1
2
3
4
5
6
interface Api {
@POST("login")
suspend fun loginByPassword(
@Body map: LoginWrapper
): Response<LoginBean>
}

2、定义请求包装类

1
data class LoginWrapper(@Keep val username: String, @Keep val password: String? = null)

与返回包装类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
data class Response<out T>(
@Keep val code: Int?,
@Keep val msg: String?,
@Keep val data: T?
) {
val success get() = code == 200
}

data class LoginBean(
@Keep val realName: String = "",
@Keep val nickName: String = "",
@Keep val id: String = "",
@Keep val hiredate: Date? = null,
@Keep val token: String = ""
)

2、创建调用实例

1
2
3
4
5
6
7
8
9
10
11
val retrofit: Retrofit = Retrofit.Builder()
.baseUrl("https://api.linwoain.com")
.addConverterFactory(
GsonConverterFactory.create(
GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create()
)
)
.client(client)
.build()

val remoteService: PandoraApi = retrofit.create()

3、调用接口

1
2
3
4
5
6
7
8
9
lifecycleScope.launch {
val response =
remoteService.loginByPassword(LoginWrapper(username = "linwoain", password = "123456") )
if (response.success) {
name.text = response.data?.nickName
} else {
Toast.makeText(this@MainActivity, response.msg, Toast.LENGTH_SHORT).show()
}
}

一切都很美好,无论成功还是失败都能正常返回,但是如果请求的时候超时了;

阅读全文 »

好久没有更新过自己的博客了,最近准备重开!!!

view绑定

使用插件,在appbuild.gradle

1
apply plugin: 'kotlin-android-extensions'

定义一个布局并设置id

1
2
3
4
5
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="show"/>

在kotlin文件中使用此控件

1
btn.setOnClickListener { Toast.makeText(this,"Hello",Toast.LENGTH_SHORT).show() }

btn控件可直接初始化,无需绑定

Anko库

Anko库是kotlin开发的一款用来替代xml布局的dsl语法
添加所有依赖

1
2
3
dependencies {
compile "org.jetbrains.anko:anko:$anko_version"
}

或者指定某些模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
dependencies {
// Anko Commons
compile "org.jetbrains.anko:anko-commons:$anko_version"

// Anko Layouts
compile "org.jetbrains.anko:anko-sdk25:$anko_version" // sdk15, sdk19, sdk21, sdk23 are also available
compile "org.jetbrains.anko:anko-appcompat-v7:$anko_version"

// Coroutine listeners for Anko Layouts
compile "org.jetbrains.anko:anko-sdk25-coroutines:$anko_version"
compile "org.jetbrains.anko:anko-appcompat-v7-couroutines:$anko_version"

// Anko SQLite
compile "org.jetbrains.anko:anko-sqlite:$anko_version"
}

示例:

阅读全文 »

昨天今天弄了一晚上,总算搞定,今天把过程给大家说一下。

博主本人原来的博客使用wordpress搭建,使用为知笔记编写,通过发布插件发布到wordpress。最近发现wordpress字体渲染异常缓慢而且体积量太大,所以萌生了换一个博客框架的想法。hexo以前就接触过。所以就在网上搜索了一些相关教程,开搞..

关于从wordpress把以前的博客导出到新的hexo网站的就不提了。只是博主在使用hexo-migrator-wordpress工具转换从wordpress转换markdown文件的时候报错。

wordpress hexo undefined migrator plugin is not installed. 

百度、google了一圈才发现是工具有问题,解决方案直接使用npm从hexo-migrator-wordpressgithub安装:

1
npm install https://github.com/hexojs/hexo-migrator-wordpress.git --save

再次运行转换工具即可

对于生成的md文件,博主检查后发现,因为以前使用wordpress的代码高亮使得md文件中各种乱七八糟的html标签。要是一一手工删除,那是要累死的节奏。博主是做Android开发的。正好以前用过去除文本中html标签又恰逢正在学习kotlin,用idea写了一段kotlin代码批量去除。之后内容就清爽了许多。然后md文件中的代码加了一下高亮标签,对各种图片调整了下布局。准备工作完成。

生成了一下文档hexo d,又本地运行了一遍hexo s,查看了下效果。嗯,还不错!

下一步,就是要上传到我的网站上了。这时候网上的教程就帮不上忙了。因为我要上传到自己的ubuntu服务器。而网上都教程都是以上传到github为目的的。这时候只能去hexo的官方查文档了。在https://hexo.io/docs/deployment.html这里列举了所有的发布方案。找到了适用于我的服务器的sftp发布方案。有办法就好办了。

阅读全文 »