Kotlin语法笔记,Kotlin Koans 心印

Hello World

案例

1
2
3
4
5
6
7
8
9
10
11
Simple Functions

Take a look at function syntax and make the function start return the string "OK".

In the tasks the function TODO() is used that throws an exception. Your job during the koans will be to replace this function invocation with a meaningful code according to the problem.

fun start(): String = TODO()

简单函数,看看函数语法,让函数start()返回字符串OK

fun start(): String = "OK"

涉及语法

Message,Handler消息传递


Message

对消息的处理public voidhandleMessage(Message msg)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Handler mHandler = new Handler() {  
@Override public void handleMessage(Message msg) {
//覆盖handleMessage方法
switch (msg.what) {//根据收到的消息的what类型处理
case BUMP_MSG:
Log.v("handler", "Handler===="+msg.arg1);//打印收到的消息
break;
default:
super.handleMessage(msg);//这里最好对不需要或者不关心的消息抛给父类,避免丢失消息
break;
}
}
};

Message message = new Message();
message.what = 0;
message.obj = ;
message.arg1 = ;
message.arg2 = ;
mHandler.sendMessage(msg);

阅读全文

Bug集合

安卓手机连接电脑调试出现以下错误

because an app is obscuring a permission request,setting cant’t verify yours response

解决方法:关闭系统悬浮球
对,没错就是魅族手机!!

安卓模拟器调试http请求

会因为电脑端口问题出现

java.io.IOException: unexpected end of stream on Connection{192.168.123.166:5554, proxy=DIRECT@ hostAddress=/192.168.123.166:5554 cipherSuite=none protocol=http/1.1} <

解决方法:使用真机调试

阅读全文

Android Studio 修改compileSDKVersion

因为某些原因,我们不需要Android Studio使用最新的编译版本,但是每次每次新建项目时Android Studio总是采用最新的SDK,但是如果在项目生成后再去修改SDK就会爆出很多问题,就想在新建项目时,让Android Studio使用我们指定的SDK

看了很多帖子,知道了大概的修改方法,但是只能修改 appcompat

但是没有找到修改compileSDKVersion的修改方法,网上给出的地址是

Android-studio/plugins/android/lib/templates/gradle-projects/NewAndroidProject/root/build.gradle.ftl

而我电脑所在的位置是

Android-Studio\plugins\android\lib\templates\gradle-projects\NewAndroidModule\root\shared_macros.ftl

阅读全文

提问的智慧

提问的智慧(转)

How To Ask Questions The Smart Way

Copyright © 2001,2006,2014 Eric S. Raymond, Rick Moen

本指南英文版版权为 Eric S. Raymond, Rick Moen 所有。

原文网址:http://www.catb.org/~esr/faqs/smart-questions.html

Copyleft 2001 by D.H.Grand(nOBODY/Ginux), 2010 by Gasolin, 2015 by Ryan Wu

本中文指南是基于原文 3.10 版以及 2010 年由 Gasolin 所翻译版本的最新翻译;

协助指出翻译问题,发 Issue,或直接发 Pull Request 给我。

本文另有繁體中文版

原文版本历史

目录

阅读全文

Android开机程序自启动

采用广播监听的方法,当监听到手机启动的时候,让APP启动,从而实现了开机自启动

权限设置

由于系统在启动完成后,会发出一个BOOT_COMPLETED广播,所以我们需要去接受这个广播。

需要添加这个权限

< uses-permission android:name=”android.permission.RECEIVE_BOOT_COMPLETED” />

添加广播

新建AutoStartBroadcastReceiver.java类继承BroadcastReceiver,记住alt+Enter添加onReceive方法。

阅读全文

论头发是怎么没的

  原来一开始的规划是从Android原生开发,后来了解到了混合,混合开发已经成为一种趋势,前端和移动的结合越来越密切。

  自从Google推出了Kotlin,截至到2018的Goole I\O 大会,使用Kotlin的人数在持续增长,他确实对Android开发提供了绿灯,更何况是Google官方推出,肯定重用它,以后,可能公司硬性要求就会是熟练掌握Kotlin。

  给老栾制作老人专用桌面,发现Android的权限正在逐步收缩,如果要达到自己想要的效果需要到Framework中修改,所以,源码又是一个大坑。

  以及各种AI和安全,Android路漫漫啊。

ListView使用(四)item交互操作

业务要求,点击item时,对应的item改变样式,接着使用(三)的项目

修改Adapter

添加成员变量以及方法

1
2
3
4
5
6
private int selectItem = -1;
private int currentFlag = 0;
//标识选择的Item
public void setSeclection(int position) {
selectItem = position;
}

在getview()中添加

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
if(selectItem == -1)
{ /* 初始状态,默认0被选中*/
if(currentFlag == position){
//设置选中的背景
view.setBackgroundColor(Color.parseColor("#FF842D6F"));
title.setTextColor(Color.parseColor("#FFFFFFFF"));

}
}else { /* 选中一个,其他item背景消失 */
if (position == selectItem)
{
view.setBackgroundColor(Color.parseColor("#FF842D6F"));
title.setTextColor(Color.parseColor("#FFFFFFFF"));

} else
{
title.setTextColor(Color.parseColor("#FF690052"));
view.setBackgroundColor(Color.parseColor("#FFFFFFFF"));

}
}

阅读全文

ListView使用(三)BaseAdapter

自定义Adapter可以满足开发中的各种需求,所以,这种用法也是比较常见。

布局文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/list_item"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
</ListView>
</android.support.constraint.ConstraintLayout>

阅读全文

Gson真好用

Gson拥有处理大型复杂json数据的能力,特别是配合GsonFormat的使用,简直无敌。

安装GsonFormat

Android Studio直接安装

File->Settings..->Plugins–>Browse repositores..搜索GsonFormat

Android Studio间接安装

1.下载 GsonFormat.jar

2.Android studio File->Settings..->Plugins –>install plugin from disk..导入下载的 GsonFormat.jar ,

3.重启 android studio.

使用GsonFormat

因为我们是采用Gson来解决数据,Gson可以把json数据直接转成java对象,所以,要先建造一个对应json数据的javaBean对象。
我们先建好javaBean类(自己起名字),然后在Bean类里面右键

阅读全文

ConstraintLayout

前言:传统的布局写起来又笨又重,布局嵌套更是一个又一个,导致加载布局的时候会极大的浪费设备性能,特别Android手机本来就卡,所以Google在2016年I|O推出了ConstraintLayout,
Constraint译为“约束;限制;强制”,所以称为约束布局。它集成了LinearLayout(线性布局),RelativeLayout(相对布局),百分比布局等,形成了新的布局方式,极大的减少了布局的嵌套,提高了布局设计的效率(当然前提是熟练掌握)。

基本的使用参考:Android新特性介绍,ConstraintLayout完全解析,这里记录一下一些属性和参数。

基本属性

控件的方位参考

属性 含义
layout_constraintBaseline_toBaselineOf A 内部文字与 B 内部文字对齐
layout_constraintLeft_toLeftOf A的左边与B的左边对齐
layout_constraintLeft_toRightOf A的左边与B的右边对齐
layout_constraintRight_toLeftOf A的右边与B的左边对齐
layout_constraintRight_toRightOf A的右边与B的右边对齐
layout_constraintTop_toTopOf A的顶部与B的顶部对齐
layout_constraintTop_toBottomOf A的顶部与B的顶部对齐
layout_constraintBottom_toTopOf A的底部与B的顶部对齐
layout_constraintBottom_toBottomOf A的底部与B的底部对齐
layout_constraintStart_toEndOf
layout_constraintStart_toStartOf
layout_constraintEnd_toStartOf
layout_constraintEnd_toEndOf

LsitView使用(二)SimpleAdapter

SimpleAdapter

  • 简单数组适配器,必须自定义选项item布局
  • 父类:BaseAdapter

SimpleAdapter的参数说明:

  • Context context:上下文(当前的Activity)
  • List<? extends Map<String, ?>> data:一个嵌套Map集合类型的list集合数据源
  • int resource:这个是你设定用于接收Map-Object类型的Activity,这个布局中必须包括了to中定义的控件id
  • String[] from:第四个参数通过源码可以看出需要的是一个K值的字符串数组,
  • int[] to:第五个参数通过源码看出是一个与K值匹配的的控件对象

    activity_main布局

    1
    2
    3
    4
    5
    6
    7
    8
    <ListView
    android:id="@+id/list_item"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

阅读全文

Okhttp使用

注意事项

response.body().string()只可使用一次,使用第二次会报错!!!!

概述

  • 一般的get请求
  • 一般的post请求
  • 基于Http的文件上传
  • 文件下载
  • 加载图片
  • 支持请求回调,直接返回对象、对象集合
  • 支持session的保持

添加okhttp

最简单的方法是在Android Studio 3.1的build.gradle(module.app)中 添加

implementation ‘com.squareup.okhttp3:okhttp:3.10.0’

implementation ‘com.squareup.okio:okio:1.14.1’

然后点击右上角sync now

okhttp GET请求

获取网页的内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//创建okHttpClient对象
OkHttpClient mOkHttpClient = new OkHttpClient();
//创建一个Request
final Request request = new Request.Builder()
//请求的url
.url("https://github.com/hongyangAndroid")
//请求的方式
.get()
//构建请求Request对象
.build();
//new call
Call call = mOkHttpClient.newCacll(request);
//请求加入调度
call.enqueue(new Callback()
{
//请求错误回调方法
@Override
public void onFailure(Request request, IOException e)
{
}
//异步请求(非主线程)
@Override
public void onResponse(final Response response) throws IOException
{
String htmlStr = response.body().string();
}
});

阅读全文

Buatton点击事件的几种写法

匿名内部类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

bt = (Button) findViewById(R.id.bt1);
//1.匿名内部类
bt.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.i("匿名内部类", "点击事件");
}
});
}

阅读全文

ListView使用(一)ArraryAdapter

ListView是Android最常用的控件之一,它是长数据显示的重要组成部分,因为手机的屏幕大小有限,一次性只能显示定量的数据,ListView的功能是将数据通过交互,使数据在手机屏幕上刷新显示。

ListView的重点是适配器的设置使用。

ListView简单使用之ArrayAdapter

使用Android自带的适配器进行ListView的使用

创建ListView布局

1
2
3
4
5
6
7
8
<ListView
android:id="@+id/list_item"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

阅读全文