Kotlin之do while和AssetsUtil

最近在用kotlin练习写一个Android项目,记录中途遇到的一些问题

一,android中的AssetsUtil

        public static String getJson(Context context, String fileName){
            StringBuilder stringBuilder = new StringBuilder();
            //获得assets资源管理器
            AssetManager assetManager = context.getAssets();
            //使用IO流读取json文件内容
            try {
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(
                        assetManager.open(fileName),"utf-8"));
                String line;
                while ((line = bufferedReader.readLine()) != null) {
                    stringBuilder.append(line);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            return stringBuilder.toString();
        }

这是平时我们用java来读取android下Assets目录下的json文件的写法

二,Kotlin中的AssetsUtil

因为在用Kotlin写项目,所以需要将以上代码用kotlin实现,自己尝试写了下,发现不好使,然后就直接将上面代码用android-studio转成kotlin 发现报错了。

var line: String = ""
while ((line = bufferedReader.readLine()) != null) {
     stringBuilder.append(line)
}

报错行出现在while里面line = bufferedReader.readLine()这里。异常为:Assignments are not expressions, and only expressions are allowed in this context

是因为在kotlin中的while不允许这么写,它会将他认为是一个表达式,而这里不允许这么写表达式。所以就想到了kotlin中的do-while ,下面是kotlin写法

object AssetsUtil {
    fun getFormAssets(context: Context, fileName: String): String? {
        val stringBuilder = StringBuilder()
        BufferedReader(InputStreamReader(context.assets.open(fileName), "UTF-8")).run {
            var line: String? = ""
            do {
                line = readLine()
                if (line != null) {
                    stringBuilder.append(line)
                } else {
                    break
                    close()
                }
            } while (true)
            return stringBuilder.toString()
        }
        return null
    }
}

测试过,以上代码可用。

三,kotlin中的 do while

其实kotlin中的 while 和 do while和Java中的用法是一样的。这里主要是想强调一下 在使用while的三个关键字

Kotlin有三种结构化跳转表达式:

  • return。默认从最直接包围他的函数或者匿名函数返回(return@this也支持从指定位置返回)
  • break。终止最直接包围它的循环
  • continue。继续下一次最直接包围它的循环。

kotlin之Android项目实战

项目代码:https://github.com/wangxp423/WanAndroidKt

猜你喜欢

转载自blog.csdn.net/wangxp423/article/details/80859320
今日推荐