• Stars
    star
    105
  • Rank 316,629 (Top 7 %)
  • Language
    Kotlin
  • License
    Apache License 2.0
  • Created over 6 years ago
  • Updated over 5 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

8小时 用kotlin开发的一款纯看妹子的app

8小时 用kotlin开发一款app

image image image image

整个项目所花时间:2018年1月1日10:20~2018年1月1日18:27 花了很多时间去爬数据 项目地址: https://github.com/xfhy/DeepNight-in-kotlin

下载试玩: http://fir.im/lga9

项目简介

一款纯看妹子的app,素材全部来源于正经图库(如有侵权,请立马告诉本人,本人邮箱[email protected],我定立刻删除),本app仅做学习交流使用,勿做商用.请注意,全是正经图片,可别想歪了哈.

由于时间非常紧急,于是没有用MVP,RxJava2,Retrofit这些都没用.直接用的anko的common库,很方便就可以异步操作和UI线程切换等,为了节约点时间.

直接上图吧,哈哈,图来得直接些(本来是gif的,结果不能上传那么大的):

说实话,项目中有很多需要优化的地方,但是时间确实有点短,来不及了,很多地方命名不规范,因为我每次想命名需要花很多时间,以前我每一个命名都是仔细思考过的.然后很多地方没有注释,也是来不及了.平时我非常注重注释.

用到的知识点

  • kotlin 语言
    • 数据类
    • 伴生对象
    • 单例
    • 扩展
    • 闭包
    • ...
  • anko
  • jsoup 爬取网页数据的库
  • Material Design 风格
  • Recyclerview 瀑布流
  • CardView
  • Glide 加载图片
  • BaseQuickAdapter 以前自己搞的一个adapter,方便快速开发
  • DrawerLayout
  • NavigationView
  • Toolbar
  • 下拉刷新,上拉加载
  • fragment懒加载

大概就是上面这些了

爬取数据

这里我就不过多叙述了(其实是不知道怎么讲...),网站非常规律,看看jsoup用法很容易就搞到手啦,不懂的可以看源码哟.

看代码吧,比我说的更清楚.结合jsoup 开发文档和网页源码一起看哟

package com.xfhy.deepnight.net

import com.xfhy.deeplibrary.common.LogUtil
import com.xfhy.deepnight.bean.DivListImgBean
import org.jetbrains.anko.collections.forEachReversedByIndex
import org.jetbrains.anko.doAsync
import org.jetbrains.anko.uiThread
import org.jsoup.Jsoup
import org.jsoup.nodes.Document
import org.jsoup.select.Elements

/**
 * @author xfhy
 * create at 2018/1/1 12:36
 * description:
 */
object NetUtils {

    /**
     * 获取外部的列表页的list
     * @param url url
     * @param index 索引  从1开始
     * @param response 回调数据
     */
    fun reqOutList(url: String, index: Int, response: ZResponse) {
        doAsync {
            try {
                //组装url
                var buildUrl = "${url}index${if (index == 1) "" else "_$index"}.shtml"

                LogUtil.e("buildUrl = $buildUrl")

                //连接
                val document: Document = Jsoup.connect(buildUrl).get()

                //筛选首页全部的链接   暂时是第一页的
                val htmls: Elements = document.select("a[href$=.shtml]")

                //筛选是可以点击进去详情的url
                htmls.forEachReversedByIndex {
                    val realUrl = it.getElementsByClass("div-img")
                    //不正确的全部移除
                    if (realUrl.size == 0) {
                        htmls.remove(it)
                    }
                }

                //外层列表的bean集合
                val outLists: ArrayList<DivListImgBean> = ArrayList()
                htmls.forEach {

                    val divListImgBean = DivListImgBean("", "","")

                    val linkElements = it.getElementsByClass("link")
                    divListImgBean.detailsUrl = linkElements.attr("href")
                    //获取图片地址
                    val imgSrcs = it.select("img[src\$=.jpg]")
                    imgSrcs.forEach {
                        val src = it.attr("src")
                        val alt = it.attr("alt")
                        divListImgBean.src = src
                        divListImgBean.text = alt
                    }
                    //添加bean到集合中
                    outLists.add(divListImgBean)
                }
                LogUtil.e(outLists.toString())
                uiThread {
                    response.onSuccess(outLists)
                }
            } catch (e: Exception) {
                uiThread {
                    response.onError(e.message)
                }
            }
        }
    }

    /**
     * 详情列表
     */
    fun reqDetails(url: String, response: ZResponse) {
        doAsync {
            try {
                //连接
                val document: Document = Jsoup.connect(url).ignoreContentType(true).get()
                val girlPictureList = document.select("div.div-num")
                val imageList: ArrayList<String> = ArrayList()
                girlPictureList.forEach {
                    if (it.hasAttr("data-src")) {
                        var imgUrl = it.attr("data-src")
                        imgUrl = imgUrl.substring(0, imgUrl.indexOf("?"))
                        imageList.add(imgUrl)
                    }
                }
                LogUtil.e(imageList.toString())
                uiThread {
                    response.onSuccess(imageList)
                }
            } catch (e: Exception) {
                uiThread {
                    response.onError(e.message)
                }

            }
        }
    }

}

构建UI

我是采用的侧滑风格的app,中间的数据全部采用fragment来填充的,fragment只有在显示后才加载数据,不会浪费过多流量.

素材取自阿里矢量图标库

More Repositories

1

Android-Notes

✍🏻 关注基础知识,打造优质Android博客
1,099
star
2

WanAndroid-Flutter

Flutter版本 WanAndroid客户端 适合Flutter入门学习
Dart
52
star
3

TODO-list

待办事项APP
Kotlin
52
star
4

LifeHelper

我的毕业设计,功能还是比较完善的
Kotlin
42
star
5

GradleStudy

Gradle学习
Groovy
21
star
6

notes

平常的一些学习笔记,统一备份到这里
Java
19
star
7

increase-process-priority

黑科技:提升进程优先级的一种思路
Java
15
star
8

Microfilm

学习时做的一个app,花了7天时间左右.如果不小心侵权了,sorry,联系我,我把它删除了,谢谢.
Java
14
star
9

Daily

拿来练练手的APP,将所学知识尽量利用起来
Java
12
star
10

AllInOne

将一些值得记录的demo放一个app demo里面
Kotlin
9
star
11

x-leeks

一个AS小插件,每个交易日下午15点前根据行情提醒一下是否该加仓了。如果行情不好,则不会提醒。
Java
9
star
12

AucFrameDemo

AucFrame 学习新组件方式
Groovy
8
star
13

EasyBanner

一个轻松实现简单banner的框架,轻松实现。。。。
Java
7
star
14

MySnake

我的贪吃蛇小项目,以前2016年3月份写的了.备份一下.留个记忆.
Java
5
star
15

MLCChat

部署大模型到Android设备
Kotlin
5
star
16

dataStructure

数据结构,语言:C++
C++
5
star
17

LifeHelperServer

毕业设计LifeHelper的服务器端
Kotlin
3
star
18

GenerateJunkCode

Android垃圾代码生成插件
Groovy
3
star
19

ComponentDemo

APP组件化最佳实践
Java
2
star
20

PhotoWall

LruCache和DiskLruCache的完美结合: 照片墙
Java
2
star
21

ViewPagerIndicator

自定义的ViewPagerIndicator,实现ViewPager的tab切换
Java
2
star
22

Algorithms

🚤 LeetCode of algorithms with java solution(updating)
Java
2
star
23

BaseRecyclerViewAdapter

经常使用RecyclerView,每次都要写很多重复的代码,真的烦.这不,最近在写的一个小项目很多地方都需要用到RecyclerView,于是我干脆将那个项目停下来,搞了这个BaseRecyclerViewAdapter.
Java
2
star
24

RInlineDemo

包体积瘦身:R文件内联优化
Groovy
1
star
25

TheThreeBodyProblem

搜集与整理的一些三体相关信息
1
star
26

PermissionDemo

权限申请demo
Kotlin
1
star
27

DesignPatterns

设计模式学习
Java
1
star
28

C-programming-road

大一的时候学的C语言,那时候还不知道怎么使用github,现在集中把那时候写的C代码备份一下.
C++
1
star
29

Android-development-real-classic

一本书,Android开发实战经典. 这是当时写的demo,记录一下.
Java
1
star
30

AndroidStudioCode

平时敲得demo,将其中觉得有意思的demo记录一下.每个demo都写上自己的独到的注释,方便以后查看.
Java
1
star
31

JournalManageSystem

这学期Java开课,老师叫我们做一个日记管理系统,每次实验就在这系统上加东西.最后,应该是具有数据库和Swing界面的
Java
1
star