小编Tyl*_*r V的帖子

使用 ACTION_CREATE_DOCUMENT 写入的文件在 Google Drive 上是空的,但不是本地存储

我有一个应用程序,它使用ACTION_CREATE_DOCUMENT意图获取要写入的 Uri 来导出 CSV 文件。这在一段时间内运行良好,但最近当我去保存文件并选择 Google Drive 时,我注意到生成的文件是空的(0 字节)。但是,如果我选择“下载”文件夹作为目标(本地存储),则会正确创建并写入文件。

保存到 Google Drive 的结果(正确写入的文件为 14 字节)

我将问题浓缩为一个简单的测试活动(如下)并验证代码的所有部分实际上都在执行(没有捕获异常,ParcelFileDescriptor不为空,等等)。

我在 Android 7 和 8 模拟器以及 Android 8 物理设备上对此进行了测试,并且都显示出相同的行为,但是旧的 Android 5 手机运行正常(??)。

该应用程序的完整版本具有并正确请求读取和写入外部存储权限以处理某些第三方文件管理器,但 Google 云端硬盘不需要这些权限,因此我在此示例中省略了它(行为与授予的权限)。

我得到的 uri 看起来像一个有效的内容 uri ( content://com.google.android.apps.docs.storage/document/acc%3...)

有没有其他人看到过这个问题?我在这里做错了吗?我怎样才能再次使用 Google Drive 进行这项工作?

public class MainActivity extends AppCompatActivity {

    private static final int FILE_EXPORT_REQUEST_CODE = 12;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (resultCode != RESULT_OK)
            return;

        switch(requestCode) …
Run Code Online (Sandbox Code Playgroud)

android android-intent google-drive-api

13
推荐指数
1
解决办法
6301
查看次数

如何在 jetpack compose 中显示具有适当大小/布局的垂直文本

如何在 jetpack 中正确旋转文本并使其进行正确的布局?当我rotate在文本对象上使用修饰符时,文本会旋转,但布局中占用的大小似乎使用预旋转的文本宽度。

这是我想要完成的一个简单示例 - 垂直文本应该位于狭窄空间的左侧:

@Composable
fun MainBox() {
    Column(
        modifier = Modifier.fillMaxSize(),
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        Text(
            modifier = Modifier.padding(4.dp).background(Color.Gray),
            text = "This is at the top"
        )

        Row(
            modifier = Modifier.fillMaxWidth().weight(1f),
            verticalAlignment = Alignment.CenterVertically
        ) {

            Text(
                modifier = Modifier.padding(4.dp).rotate(-90f),
                text = "This should be vertical text on the left side"
            )

            Text(
                modifier = Modifier.fillMaxSize().background(Color.Yellow),
                textAlign = TextAlign.Center,
                text = "This is a big yellow box that should take up most of the …
Run Code Online (Sandbox Code Playgroud)

android android-jetpack android-jetpack-compose

6
推荐指数
1
解决办法
3612
查看次数

修改 SnapshotStateList 会引发 ConcurrentModificationException

的文档SnapshotStateList指出它类似于常规的可变列表。我有一个用例,我需要修改列表 ( ) 中的所有元素set case。这不会改变列表的大小,但我遇到了 ConcurrentModificationException。

我在这里创建了一个非常简化的用例版本。以下 kotlin 列表运行良好:

val myList2 = mutableListOf("a", "b", "c")
myList2.forEachIndexed { index, _ ->
    // Modify item at index
    myList2[index] = "x"
}
Run Code Online (Sandbox Code Playgroud)

但我在这里遇到并发修改异常:

val myList = mutableStateListOf("a", "b", "c")
myList.forEachIndexed { index, _ ->
    // Modify item at index but I get an exception
    myList[index] = "x"
}
Run Code Online (Sandbox Code Playgroud)

如何修改mutableStateList()in place 的所有元素而不出现并发修改异常?

编辑:

我可以创建一个副本mutableStateList来迭代它,它工作得很好,但由于我没有更改列表的大小,是否可以就地执行它?

android concurrentmodification kotlin

5
推荐指数
1
解决办法
1247
查看次数

指针调用和引用调用的区别

我随机地玩弄指针和参考文献。

class Product {
    int price,qty;
    
    public:
    void setData(int price, int qty) {
        this->price = price;
        (*this).qty = qty;
    }
    void billing() {
        cout << price * qty;
    }
};

int main() {
    Product *PenObj;
    (*PenObj).setData(50,25);
    (*PenObj).billing();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么这不打印账单。但是当我使用引用对象时,它会打印出账单。

c++

0
推荐指数
1
解决办法
63
查看次数