www.91084.com

GVKun编程网logo

自定义进度条Android,kotlin(自定义进度条)

31

对于想了解自定义进度条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(自定义进度条)

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

如何解决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自定义图片进度,自定义渐变色进度条

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报错 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 里的版本一致,
设置同一个版本就好了。

image.pngimage.png

android – Kotlin自定义获取执行方法调用

android – Kotlin自定义获取执行方法调用

为了提高对SharedPreferences.Editor的调用的可读性,我想使用一个Kotlin变量,每当我需要一个新的SharedPreferences.Editor时,它将执行’getSharedPreferences.edit()’.最初我打算使用这样的东西:
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()方法是否会引用编辑器而不是创建新的编辑器.

解决方法

第二个属性声明适合您的需要:它有一个 custom getter,因此获取属性值将始终执行getter,并且不存储该值(该属性没有 backing field).

你可能会被等号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自定义获取执行方法调用的相关知识,请在本站寻找。

本文标签: