对于想了解自定义进度条Android,kotlin的读者,本文将是一篇不可错过的文章,我们将详细介绍自定义进度条,并且为您提供关于AndroidKotlinRXKotlinRoom-错误Kotlin.
对于想了解自定义进度条Android,kotlin的读者,本文将是一篇不可错过的文章,我们将详细介绍自定义进度条,并且为您提供关于Android Kotlin RXKotlin Room - 错误 Kotlin.unit、Android ProgressBar自定义图片进度,自定义渐变色进度条、Android studio 升级M1版后,kotlin报错 connect to Kotlin Daemon、android – Kotlin自定义获取执行方法调用的有价值信息。
本文目录一览:- 自定义进度条Android,kotlin(自定义进度条)
- Android Kotlin RXKotlin Room - 错误 Kotlin.unit
- Android ProgressBar自定义图片进度,自定义渐变色进度条
- Android studio 升级M1版后,kotlin报错 connect to Kotlin Daemon
- android – Kotlin自定义获取执行方法调用
自定义进度条Android,kotlin(自定义进度条)
1:效果
一运行起来,红色是下载的部分,蓝色是为下载部分,下载完之后先缩成一个椭圆,在缩成一个圆
GitHub地址:https://github.com/luofangli/MyDrawProgress
详细代码:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.example.my.CustomProgress
android:id="@+id/custom_progress"
android:layout_width="0dp"
android:layout_height="100dp"
android:layout_marginStart="20dp"
android:layout_marginTop="200dp"
android:layout_marginEnd="20dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
package com.example.my
import android.animation.AnimatorSet
import android.animation.ValueAnimator
import android.content.Context
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Paint
import android.graphics.Path
import android.util.AttributeSet
import android.util.Log
import android.view.View
class CustomProgress : View {
//运行起来的背景画笔
private val paintFirst:Paint by lazy {
Paint().apply {
style = Paint.Style.FILL
color = Color.BLUE
}
}
//移动的进度条的画笔
private val paintSecond:Paint by lazy {
Paint().apply {
style = Paint.Style.FILL
color = Color.RED
}
}
//勾勾的画笔
private val paintPath:Paint by lazy {
Paint().apply {
style = Paint.Style.stroke
color = Color.WHITE
strokeWidth = 6f
}
}
//勾勾的路径
private val path:Path by lazy {
Path().apply {
moveto(startpathX,startpathY)
lineto(centerpathX,centerpathY)
}
}
//定义动画因子
//路径移动的起点和尾点
private var startpathX = 0f
private var startpathY = 0f
private var centerpathX = 0f
private var centerpathY = 0f
//两边向中间移动成一个圆的距离
private var centerdistance = 0f
//圆矩形圆的半径
private var radius = 0f
//进度条的总长度
private var progressLength = 0f
//进度条下载过程中的动画因子
private var alldistance = 0f
//外部下载的进度
var loadProgress = 0f
set(value) {
field = value
progressGo(field)
}
constructor(context: Context):super(context){}
constructor(context: Context,attributeSet: AttributeSet):super(context,attributeSet){}
override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
super.onSizeChanged(w, h, oldw, oldh)
progressLength = measuredWidth.toFloat()
// startpathX = measuredWidth/2f-measuredHeight*3/10f
// startpathY = measuredHeight/2f
// centerpathX = measuredWidth/2f-measuredHeight*3/10f
// centerpathY = measuredHeight/2f
startpathX = measuredWidth/2f-radius/2
startpathY = measuredHeight/2f
centerpathX =measuredWidth/2f-radius/2
centerpathY = measuredHeight/2f
}
override fun onDraw(canvas: Canvas?) {
super.onDraw(canvas)
//运行起来就有的背景
canvas?.drawRoundRect(alldistance,0f,measuredWidth.toFloat(),measuredHeight.toFloat(),
0f,0f,paintFirst)
//移动的进度条
canvas?.drawRoundRect(0f+centerdistance,0f,alldistance-centerdistance,measuredHeight.toFloat(),
radius,radius,paintSecond)
//画勾勾
canvas?.drawPath(path,paintPath)
}
//进度条前进的动画
private fun progressGo(load:Float){
alldistance = progressLength*load
//下载完之后执行
if (alldistance == progressLength){
afterProgress()
}
invalidate()
}
//进度条完了之后的动画
private fun afterProgress(){
//如果进度条完了则开启下面的动画
//由长方形变成一个圆矩形的动画
val radiusValueAnimator = ValueAnimator.ofFloat(0f,measuredHeight/2f).apply {
duration = 2000
addUpdateListener {
Log.v("lfl","长方形变成圆矩形")
val value = it.animatedValue as Float
radius = value
invalidate()
}
}
//由两边向中间移动成一个圆的距离
val centerValueAnimator = ValueAnimator.ofFloat(0f,(measuredWidth-measuredHeight)/2f).apply {
duration = 2000
addUpdateListener {
Log.v("lfl","从两边缩成一个圆")
val value = it.animatedValue as Float
centerdistance = value
invalidate()
}
}
//画钩钩
// measuredWidth/2f-measuredHeight*3/20f,
val pathXValueAnimator = ValueAnimator.ofFloat(measuredWidth/2f-radius/2f,
measuredWidth/2f+radius/2f).apply {
duration = 2000
addUpdateListener {
val value = it.animatedValue as Float
centerpathX = value
Log.v("lfl","勾勾尾巴的位置X:$centerpathX")
invalidate()
}
}
val pathYValueAnimator = ValueAnimator.ofFloat(measuredHeight/2f,
measuredHeight/2f+radius/2f,
measuredHeight/2f-radius/2f).apply {
duration = 2000
addUpdateListener {
val value = it.animatedValue as Float
centerpathY = value
invalidate()
}
}
val path = AnimatorSet().apply {
playTogether(pathXValueAnimator,pathYValueAnimator)
Log.v("lfl","圆的区域为:左:${measuredWidth/2-radius},上:${measuredHeight/2-radius}," +
"右:${measuredWidth/2+radius},下:${measuredHeight/2+radius}")
}
val ValueAnimator = AnimatorSet().apply {
playSequentially(radiusValueAnimator,centerValueAnimator)
}
val all = AnimatorSet().apply {
playSequentially(ValueAnimator,path)
}.start()
}
}
package com.example.my
import android.animation.ValueAnimator
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
ValueAnimator.ofFloat(0f,1f).apply {
duration = 1000
addUpdateListener {
val value = it.animatedValue as Float
custom_progress.loadProgress = value
}
}.start()
}
}
Android Kotlin RXKotlin Room - 错误 Kotlin.unit
如何解决Android Kotlin RXKotlin Room - 错误 Kotlin.unit?
我想通过循环数组向房间数据库做一个简单的插入数据。 我使用 RXKotlin 来迭代数组 我有一个这样的数组:
fun defaultDataCategory() : ArrayList<CategoryModel>{
var cat: CategoryModel
var catArrayList: ArrayList<CategoryModel> = ArrayList(0)
val date: Int = Calendar.DATE
val formatedDate = SimpleDateFormat("yyyy-MM-dd").format(Date())
val formatedTime = SimpleDateFormat("HH:mm").format(Date())
val DateTime = "$formatedDate $formatedTime"
catArrayList.add(
CategoryModel(
1,"Personal",true,"Red",Converter.toDate(Calendar.getInstance().timeInMillis),"system","system"
)
)
catArrayList.add(
CategoryModel(
2,"Work","Blue","system"
)
)
catArrayList.add(
CategoryModel(
3,"Home","Purple","system"
)
)
catArrayList.add(
CategoryModel(
4,"Learn","Yellow","system"
)
)
return catArrayList
}
我像这样用 RXKotlin 循环了一个数组
var catArrayList: ArrayList<CategoryModel> = DefaultData.defaultDataCategory()
catArrayList.toObservable()
.subscribeBy( // named arguments for lambda Subscribers
onNext = { homeviewmodel.insertCategory(it) },onError = { Log.e("error insert=",it.printstacktrace().toString()) },onComplete = { Log.e("complete insert=","complete insert") }
)
我得到了一个错误“kotlin.unit”。
Error RXKotlin
如何使用 RXKotlin 迭代数组并插入房间数据库?
解决方法
试试
Observable.fromIterable(catArrayList).subscribeBy {...}
Android ProgressBar自定义图片进度,自定义渐变色进度条
java.lang.Object
↳ android.view.View
↳ android.widget.ProgressBar
直接子类
AbsSeekBar
间接子类
RatingBar, SeekBar
|
在某些操作的进度中的可视指示器,为用户呈现操作的进度,还它有一个次要的进度条,用来显示中间进度,如在流媒体播放的缓冲区的进度。一个进度条也可不确定其进度。在不确定模式下,进度条显示循环动画。这种模式常用于应用程序使用任务的长度是未知的。进度条也就是一个表示运转的过程,例如发送短信,连接网络等等,表示一个过程正在执行中
1、android.widget. ProgressBar,继承自android.view.View 。在android.widget包中。对应对话框ProgressDialog。ProgressBar有两种展示方式,表盘形式(普通、小、大)和条形填充形式。在layout定义时,需要通过设施style属性类设置展示方式。
ProgressBar的样式有四种:
android:progressBarStyle:默认进度条样式,不确定模式
android:progressBarStyleHorizontal:水平进度条样式
android:progressBarStyleLarge :大号进度条样式,也是不确定进度模式
android:progressBarStyleSmall :小号进度条样式,也是不确定进度模式
二、XML重要属性
android:max-- 这事进度条长度最大值
android:progress--设定度条当前进度值
android:secondaryProgress--第二进度条进度值
android:progressBarStyle:默认进度条样式
android:progressBarStyleHorizontal:水平样式
style
=
"?android:attr/progressBarStyleLarge" --- 属性风格类型--大圆圈,如下图
style=”?android:attr/progressBarStyleSmall”
--- 属性风格类型--小圆圈,如下图:
--水平进度条 --
如下图:
几秒钟之后自动滚到到如下:
也可以用下面的形式代替上面的形式的:
?
1
2
3
|
<
ProgressBar
style
=
"@android :style/Widget.ProgressBar.Inverse"
/>//中
<
ProgressBar
style
=
"@android :style/Widget.ProgressBar.Large.Inverse"
/> //大圆
<
ProgressBar
style
=
"@android :style/Widget.ProgressBar.Small.Inverse"
/> //小圆
|
三、重要方法
getMax():返回这个进度条的范围的上限
getProgress():返回当前进度值
getSecondaryProgress():返回次要当前进度值
incrementProgressBy(int diff):指定增加的进度--即步长
isIndeterminate():指示进度条是否在不确定模式下
setIndeterminate(boolean indeterminate):设置不确定模式下
setVisibility(int v):设置该进度条是否可视
四、重要事件
onSizeChanged(int w, int h, int oldw, int oldh):当进度值改变时引发此事件
接下来看案例:
1.定义一个布局文件progressbar.xml
?
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<
ScrollView
xmlns:android
=
"http://schemas.android.com/apk/res/android"
android:layout_width
=
"fill_parent"
android:layout_height
=
"match_parent"
>
<
LinearLayout
android:layout_width
=
"fill_parent"
android:layout_height
=
"match_parent"
android:orientation
=
"vertical"
>
<
TextView
android:id
=
"@+id/startText"
android:layout_width
=
"fill_parent"
android:layout_height
=
"wrap_content"
android:text
=
"垂直的----标题上面也有一个进度条哦"
android:textColor
=
"#CD0000"
android:background
=
"#BC8F8F"
/>
<!-- style=”?android:attr/progressBarStyleLarge”大圆圈 -->
<
ProgressBar
android:id
=
"@+id/progtessBer_btn_id1"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
style
=
"?android:attr/progressBarStyleLarge"
/>
<!-- style=”?android:attr/progressBarStyleSmall”小圆圈 -->
<
ProgressBar
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
style
=
"?android:attr/progressBarStyleSmall"
android:layout_gravity
=
"center_horizontal"
/>
<
TextView
android:id
=
"@+id/startText1"
android:layout_width
=
"fill_parent"
android:layout_height
=
"wrap_content"
android:text
=
"水平的"
android:textColor
=
"#aaaaaa"
/>
<!-- 水平进度条 -->
<
ProgressBar
android:id
=
"@+id/progtessBer_btn_id2"
android:layout_width
=
"fill_parent"
android:layout_height
=
"wrap_content"
style
=
"?android:attr/progressBarStyleHorizontal"
/>
<
TextView
android:layout_width
=
"fill_parent"
android:layout_height
=
"wrap_content"
android:text
=
"@string/progress_text"
/>
</
LinearLayout
>
</
ScrollView
>
|
2.之后定义java文件:ProgressBarDemo.java
?
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
package
com.dream.app.start.first.prograssbar;
import
com.dream.app.start.MenuDemo;
import
com.dream.app.start.R;
import
com.dream.app.start.R.id;
import
com.dream.app.start.R.layout;
import
com.dream.app.start.utils.PublicClass;
import
android.app.Activity;
import
android.content.Intent;
import
android.os.Bundle;
import
android.os.Handler;
import
android.text.method.ScrollingMovementMethod;
import
android.view.View;
import
android.view.View.OnClickListener;
import
android.view.Window;
import
android.widget.AdapterView;
import
android.widget.AdapterView.OnItemClickListener;
import
android.widget.ArrayAdapter;
import
android.widget.Button;
import
android.widget.ListView;
import
android.widget.ProgressBar;
import
android.widget.TextView;
import
android.widget.Toast;
public
class
ProgressBarDemo
extends
PublicClass {
private
ProgressBar progressbar,progressbar_1;
Button btn1,btn2;
private
int
prostatus=
0
;
//创建一个handler对象
private
Handler handler=
new
Handler();
@Override
protected
void
onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super
.onCreate(savedInstanceState);
//在标题条里放置进度条。请求窗口特色风格,这里设置成不明确的进度风格
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
//设置窗口进度条特性风格
// requestWindowFeature(Window.FEATURE_PROGRESS);
setContentView(R.layout.progressbar);
//设置标题栏中的不明确的进度条是否可以显示,当你需要表示处理中的时候设置为True,处理完毕后设置为false
setProgressBarIndeterminateVisibility(
true
);
//设置进度条进度值,要乘以100的
// setProgress(60*100);
// setSecondaryProgress(80*100);
btn2=(Button)findViewById(R.id.button_cancel);
// btn2.setOnClickListener(onClick);
progressbar=(ProgressBar)findViewById(R.id.progtessBer_btn_id2);
progressbar_1=(ProgressBar)findViewById(R.id.progtessBer_btn_id1);
//设置进度条的最大值
progressbar.setMax(
100000
);
progressbar_1.setMax(
100000
);
//新开启一个进程
new
Thread(
new
Runnable() {
@Override
public
void
run() {
// 循环1000次,不断地更新prostatus状态值
while
(prostatus++<
100000
) {
//将一个Runnable对象添加到消息队列中去
//并且当执行该对象的时候,执行run
handler.post(
new
Runnable() {
@Override
public
void
run() {
//重新设置进度条当前的值
progressbar.setProgress(prostatus);
progressbar_1.setProgress(prostatus);
}
});
}
}
}).start();
}
//toast方法
private
void
toastshow(String str) {
Toast.makeText(getApplicationContext(), str, Toast.LENGTH_SHORT).show();
}
}
|
运行效果如下:
二:用图片实现滚动效果:
1.添加图片到drawable下
2.自定义图片资源文件iamge_progress.xml
?
1
2
3
4
5
6
7
|
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<
animated-rotate
xmlns:android
=
"http://schemas.android.com/apk/res/android"
android:drawable
=
"@drawable/image_progress"
android:pivotX
=
"50%"
android:pivotY
=
"50%"
/>
|
3.定义布局文件,progress.xml
?
1
2
3
4
5
6
7
8
9
10
11
|
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<
LinearLayout
xmlns:android
=
"http://schemas.android.com/apk/res/android"
android:orientation
=
"vertical"
android:layout_width
=
"fill_parent"
android:layout_height
=
"fill_parent"
android:gravity
=
"center"
>
<
ProgressBar
android:indeterminateDrawable
=
"@drawable/drawable_progress"
android:layout_height
=
"100dp"
android:layout_width
=
"100dp"
/>
</
LinearLayout
>
|
运行效果如下:
三》自定义渐变色进度条:
定义drawable资源文件color_progressbar.xml
?
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
28
29
30
31
32
33
34
35
36
37
38
|
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<
layer-list
xmlns:android
=
"http://schemas.android.com/apk/res/android"
>
<
item
android:id
=
"@android:id/background"
>
<
shape
>
<
corners
android:radius
=
"5dip"
/>
<
gradient
android:startColor
=
"#ff9d9e9d"
android:centerColor
=
"#ff5a5d5a"
android:centerY
=
"0.75"
android:endColor
=
"#ff747674"
android:angle
=
"270"
/>
</
shape
>
</
item
>
<
item
android:id
=
"@android:id/secondaryProgress"
>
<
clip
>
<
shape
>
<
corners
android:radius
=
"5dip"
/>
<
gradient
android:startColor
=
"#80ffd300"
android:centerColor
=
"#80ffb600"
android:centerY
=
"0.75"
android:endColor
=
"#a0ffcb00"
android:angle
=
"270"
/>
</
shape
>
</
clip
>
</
item
>
<
item
android:id
=
"@android:id/progress"
>
<
clip
>
<
shape
>
<
corners
android:radius
=
"5dip"
/>
<
gradient
android:startColor
=
"#FF3030"
android:endColor
=
"#AEEEEE"
android:angle
=
"270"
/>
</
shape
>
</
clip
>
</
item
>
</
layer-list
>
|
2.定义对应的不布局文件:progressbar.xml在此文件中引用我们定义的drawable资源配置文件
?
1
2
3
4
5
6
7
8
9
10
11
12
|
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<
LinearLayout
xmlns:android
=
"http://schemas.android.com/apk/res/android"
android:orientation
=
"vertical"
android:layout_width
=
"fill_parent"
android:layout_height
=
"fill_parent"
android:gravity
=
"center"
>
<
ProgressBar
android:id
=
"@+id/color_progressBar"
android:indeterminateDrawable
=
"@drawable/color_progress"
android:layout_height
=
"wrap_content"
android:layout_width
=
"match_parent"
/>
</
LinearLayout
>
|
或者在代码中给进度条设置自定义资源文件:
效果如下:
四:自定义progressbar颜色:
1.定义一个图片资源文件:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<
rotate
xmlns:android
=
"http://schemas.android.com/apk/res/android"
android:fromDegrees
=
"0"
android:pivotX
=
"50%"
android:pivotY
=
"50%"
android:toDegrees
=
"360"
>
<
shape
android:innerRadiusRatio
=
"3"
android:shape
=
"ring"
android:thicknessRatio
=
"8"
android:useLevel
=
"false"
>
<
gradient
android:centerColor
=
"#FFFFFF"
android:centerY
=
"0.50"
android:endColor
=
"#FFFF00"
android:startColor
=
"#000000"
android:type
=
"sweep"
android:useLevel
=
"false"
/>
</
shape
>
</
rotate
>
|
2.定义布局文件:
?
1
2
3
4
5
|
<
ProgressBar
android:id
=
"@+id/color_progressBar2"
android:indeterminateDrawable
=
"@drawable/color_progress2"
android:layout_height
=
"wrap_content"
android:layout_width
=
"wrap_content"
/>
|
3.效果:
Android studio 升级M1版后,kotlin报错 connect to Kotlin Daemon
Android studio 升级M1版后,kotlin报错 Caught an exception trying to connect to Kotlin Daemon。
出现这个问题大约是项目kotlin版本和IDE 插件版本不一致导致的。
Caught an exception trying to connect to Kotlin Daemon:
java.lang.NoClassDefFoundError: org/jetbrains/kotlin/daemon/client/DaemonReportingTargets
at org.jetbrains.kotlin.compilerRunner.KotlinCompilerRunnerUtils.newDaemonConnection(KotlinCompilerRunnerUtils.kt:59)
at org.jetbrains.kotlin.compilerRunner.KotlinCompilerRunnerUtils.newDaemonConnection$default(KotlinCompilerRunnerUtils.kt:49)
at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunner$Companion.getDaemonConnectionImpl$kotlin_gradle_plugin(GradleKotlinCompilerRunner.kt:164)
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:159)
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:134)
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:117)
at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunner.runCompilerAsync(GradleKotlinCompilerRunner.kt:146)
at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunner.runCompilerAsync(GradleKotlinCompilerRunner.kt:141)
at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunner.runJvmCompilerAsync(GradleKotlinCompilerRunner.kt:81)
at org.jetbrains.kotlin.gradle.tasks.KotlinCompile.callCompilerAsync$kotlin_gradle_plugin(Tasks.kt:449)
at org.jetbrains.kotlin.gradle.tasks.KotlinCompile.callCompilerAsync$kotlin_gradle_plugin(Tasks.kt:359)
at org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile.executeImpl(Tasks.kt:316)
at org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile.execute(Tasks.kt:288)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:103)
at org.gradle.api.internal.project.taskfactory.IncrementalTaskInputsTaskAction.doExecute(IncrementalTaskInputsTaskAction.java:47)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:42)
at org.gradle.api.internal.project.taskfactory.AbstractIncrementalTaskAction.execute(AbstractIncrementalTaskAction.java:25)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:28)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$5.run(ExecuteActionsTaskExecuter.java:476)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:461)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:444)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.access$200(ExecuteActionsTaskExecuter.java:93)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.execute(ExecuteActionsTaskExecuter.java:237)
at org.gradle.internal.execution.steps.ExecuteStep.lambda$execute$0(ExecuteStep.java:32)
at java.util.Optional.map(Optional.java:215)
at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:32)
at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:26)
at org.gradle.internal.execution.steps.CleanupOutputsStep.execute(CleanupOutputsStep.java:58)
at org.gradle.internal.execution.steps.CleanupOutputsStep.execute(CleanupOutputsStep.java:35)
at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:48)
at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:33)
at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:39)
at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:73)
at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:54)
at org.gradle.internal.execution.steps.CatchExceptionStep.execute(CatchExceptionStep.java:35)
at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:51)
at org.gradle.internal.execution.steps.SnapshotOutputsStep.execute(SnapshotOutputsStep.java:45)
at org.gradle.internal.execution.steps.SnapshotOutputsStep.execute(SnapshotOutputsStep.java:31)
at org.gradle.internal.execution.steps.CacheStep.executeWithoutCache(CacheStep.java:208)
at org.gradle.internal.execution.steps.CacheStep.execute(CacheStep.java:70)
at org.gradle.internal.execution.steps.CacheStep.execute(CacheStep.java:45)
at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:49)
at org.gradle.internal.execution.steps.StoreSnapshotsStep.execute(StoreSnapshotsStep.java:43)
at org.gradle.internal.execution.steps.StoreSnapshotsStep.execute(StoreSnapshotsStep.java:32)
at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:38)
at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:24)
at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:96)
at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$0(SkipUpToDateStep.java:89)
at java.util.Optional.map(Optional.java:215)
at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:54)
at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:38)
at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:76)
at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:37)
at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:36)
at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:26)
at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:90)
at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:48)
at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:69)
at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:47)
at org.gradle.internal.execution.impl.DefaultWorkExecutor.execute(DefaultWorkExecutor.java:33)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:140)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:62)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:108)
at org.gradle.api.internal.tasks.execution.ResolveBeforeExecutionOutputsTaskExecuter.execute(ResolveBeforeExecutionOutputsTaskExecuter.java:67)
at org.gradle.api.internal.tasks.execution.ResolveAfterPreviousExecutionStateTaskExecuter.execute(ResolveAfterPreviousExecutionStateTaskExecuter.java:46)
at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:94)
at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:95)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:43)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:355)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:343)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:336)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:322)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:134)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:129)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:202)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:193)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:129)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
at java.lang.Thread.run(Thread.java:748)
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task '':app:compileDebugKotlin''.
> org/jetbrains/kotlin/daemon/client/DaemonReportingTargets
解决方法:
设置>插件,查看kotlin版本 是否和 build.gradle 里的版本一致,
设置同一个版本就好了。
android – Kotlin自定义获取执行方法调用
val editPreferences: SharedPreferences.Editor = Application.getSharedPreferences("preferences",Context.MODE_PRIVATE).edit()
但后来我被告知,’editPreferences’将保留对同一编辑器的引用,当我每次调用’editPreferences’时我真正希望它创建一个新的编辑器.
如果使用自定义getter,每次都会返回一个新的编辑器吗?像这样的东西:
val editPreferences: SharedPreferences.Editor get() = Application.getSharedPreferences("preferences",Context.MODE_PRIVATE).edit()
仍在使用Kotlin并且不确定get()方法是否会引用编辑器而不是创建新的编辑器.
解决方法
你可能会被等号get()= …弄糊涂,但对于等效的getter形式它只是一个single-expression shorthand:
val editPreferences: SharedPreferences.Editor get() { return Application .getSharedPreferences("preferences",Context.MODE_PRIVATE) .edit() }
关于自定义进度条Android,kotlin和自定义进度条的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于Android Kotlin RXKotlin Room - 错误 Kotlin.unit、Android ProgressBar自定义图片进度,自定义渐变色进度条、Android studio 升级M1版后,kotlin报错 connect to Kotlin Daemon、android – Kotlin自定义获取执行方法调用的相关知识,请在本站寻找。
本文标签: