Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android应用程序中使用kotlin循环来避免ANR?_Android_Android Studio_Kotlin - Fatal编程技术网

如何在android应用程序中使用kotlin循环来避免ANR?

如何在android应用程序中使用kotlin循环来避免ANR?,android,android-studio,kotlin,Android,Android Studio,Kotlin,我在android应用程序中使用kotlin。我编写了以下用于解码坐标的函数: private fun decodeCoordinates(address: String) { var lat: String = "" var lng: String = "" var flag = true var count = 0 while (count < address.length) { if (address[count].eq

我在android应用程序中使用kotlin。我编写了以下用于解码坐标的函数:

    private fun decodeCoordinates(address: String) {
    var lat: String = ""
    var lng: String = ""
    var flag = true
    var count = 0
    while (count < address.length) {
        if (address[count].equals(',')) {
            flag = false;
            continue
        }
        if (flag) {
            lat += address[count]
        } else {
            lng += address[count]
        }
        count++;
    }
    Log.i("dxdiag", "Lat: $lat")
    Log.i("dxdiag", "Lng: $lng")
}
private坐标(地址:字符串){
var lat:String=“”
var lng:String=“”
var flag=true
变量计数=0
while(计数<地址长度){
如果(地址[count]。等于(',')){
flag=false;
持续
}
国际单项体育联合会(旗){
lat+=地址[计数]
}否则{
lng+=地址[计数]
}
计数++;
}
Log.i(“dxdiag”,“Lat:$Lat”)
日志i(“dxdiag”,“液化天然气:$Lng”)
}

但应用程序挂起,如果我删除
继续
,则应用程序不挂起

问题是您正在更改循环内的列表长度,这将导致ANR。使用循环代码:

 var length = address.legth
 while (count < length) {
    if (address[count].equals(',')) {
        flag = false;
        continue
    }
    if (flag) {
        lat += address[count]
    } else {
        lng += address[count]
    }
    count++;
}
var length=address.legth
while(计数<长度){
如果(地址[count]。等于(',')){
flag=false;
持续
}
国际单项体育联合会(旗){
lat+=地址[计数]
}否则{
lng+=地址[计数]
}
计数++;
}

问题在于,您正在更改循环中列表的长度,这将导致ANR。使用循环代码:

 var length = address.legth
 while (count < length) {
    if (address[count].equals(',')) {
        flag = false;
        continue
    }
    if (flag) {
        lat += address[count]
    } else {
        lng += address[count]
    }
    count++;
}
var length=address.legth
while(计数<长度){
如果(地址[count]。等于(',')){
flag=false;
持续
}
国际单项体育联合会(旗){
lat+=地址[计数]
}否则{
lng+=地址[计数]
}
计数++;
}

继续之前,只需输入count++即可。如果不是的话,你就处在一个无限循环中,因为计数永远不会增加。谢谢,在继续之前只需输入计数+。否则,您将处于无限循环中,因为计数从未增加。谢谢,一旦遇到
,“
,它仍将执行无限循环。在调用
continue
之前,您需要增加计数。一旦遇到
,“
,它仍然会执行无限循环。您需要先增加计数,然后再调用
continue