【问题标题】:Assignments are not expressions - Kotlin赋值不是表达式 - Kotlin
【发布时间】:2018-07-18 10:33:43
【问题描述】:

我正在将使用 Java 构建的项目重构为 Kotlin,并从 sqlite 资产表中复制数据库我正在这样做并且它工作正常。

private void copyDataBase() throws IOException {
        InputStream mInput = mContext.getAssets().open(DB_NAME);
        String outFileName = DB_PATH + DB_NAME;
        OutputStream mOutput = new FileOutputStream(outFileName);
        byte[] mBuffer = new byte[1024];
        int mLength;
        while ((mLength = mInput.read(mBuffer)) > 0) {
            mOutput.write(mBuffer, 0, mLength);
        }
        mOutput.flush();
        mOutput.close();
        mInput.close();
    }

如何处理“赋值不是表达式,在这种情况下只允许表达式”?

@Throws(IOException::class)
    private fun copyDataBase() {
        val mInput = mContext.assets.open(DB_NAME)
        val outFileName = DB_PATH + DB_NAME
        val mOutput = FileOutputStream(outFileName)
        val mBuffer = ByteArray(1024)
        var mLength: Int
        while ((mLength = mInput.read(mBuffer)) > 0) {
            mOutput.write(mBuffer, 0, mLength)
        }
        mOutput.flush()
        mOutput.close()
        mInput.close()
    }

错误在这里

while ((mLength = mInput.read(mBuffer)) > 0) {
            mOutput.write(mBuffer, 0, mLength)
        }

谢谢。

【问题讨论】:

    标签: android database sqlite kotlin


    【解决方案1】:

    改成:

     mLength = mInput.read(mBuffer)
     while (mLength > 0) { 
            mOutput.write(mBuffer, 0, mLength)
            mLength = mInput.read(mBuffer)
        }
    

    【讨论】:

    • 工作。谢谢。
    【解决方案2】:

    这是解决您的问题的方法:

    while ({mLength = mInput.read(mBuffer); mLength}() > 0) {
        mOutput.write(mBuffer, 0, mLength)
    }
    

    更多详情请阅读this discussion

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-24
      • 1970-01-01
      • 2018-01-10
      • 1970-01-01
      相关资源
      最近更新 更多