小编Gau*_*all的帖子

getExternalStoragePublicDirectory在Android Q中已弃用

由于getExternalStoragePublicDirectory已在中弃用Android Q,建议使用其他方式。那么我们如何指定我们要将相机应用程序生成的照片存储到DCIM文件夹或文件夹中的自定义子文件夹中DCIM呢?

文档指出,接下来的3个选项是新的首选替代品:

  1. Context#getExternalFilesDir(String)
  2. 媒体商店
  3. 意图#ACTION_OPEN_DOCUMENT

选项1不存在,因为这意味着如果卸载该应用程序,照片将被删除。

选项3也不是一个选择,因为它将要求用户通过SAF文件浏览器选择位置。

我们只剩下选项2,即MediaStore;但是没有文档说明如何使用它代替Android Q中的getExternalStoragePublicDirectory。

android

14
推荐指数
2
解决办法
5973
查看次数

如何在 Dart 中编写字节数组?

如何在 Dart 中编写字节数组?我想实现这个功能,但是里面有Java代码byte[]。它也可以用 Dart 编写吗?

public static byte[] encrypt(byte[] key, byte[] data) throws Exception {
    try {
        return performCipher(Cipher.ENCRYPT_MODE, key, data);
    } catch (Exception e) {
        throw new Exception(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

java dart flutter

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

如何将警报对话框按钮向左对齐?

我想创建一个带有 ltr 按钮的警报对话框。但我们似乎无法访问积极按钮的详细信息。

这个答案是将按钮居中对齐,但我想将其左对齐。

我刚刚检查了堆栈,没有找到任何涵盖此内容的内容。我不想为对话框创建 custom_layout.xml。

android android-alertdialog

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

模拟滚动两个骰子java,看看结果是否为“ 1,1”

这是我用Java编写的作业问题:编写一个模拟20个骰子滚动20次的程序。程序输出每对结果,并计算和输出结果为的次数1, 1

我试图运行此代码,但是遇到了问题。这是我的代码:

Scanner in = new Scanner(System.in);
int dice1, dice2, i, j, countOneOne;
countOneOne = 0;
// dice1 = 0;
// dice2 = 0;

for (j = 1;j <= 5; j++) {
    dice1 = 1 +(int) (Math.random() * 6); 
    j = dice1;
    System.out.println("Result of dice1: " + dice1);
} 
for (i = 1; i <= 5; i++) {
    dice2 = 1 +(int)(Math.random()*6);
    i = dice2;
    System.out.println("Result of dice2: " + dice2);
}

System.out.println("Result of dice1: " + …
Run Code Online (Sandbox Code Playgroud)

java

4
推荐指数
1
解决办法
50
查看次数

有没有更好的方法来对抗SQL注入?

我已经多次看过Computerphile关于这个主题的视频(对于任何想要的人,这是链接:https : //www.youtube.com/watch?v=_jKylhJtPmI)。他提供了一些有关如何打击SQL Injection应用程序并使之更加有效的非常好的建议。这些是他的视频的重点:

  1. 不要使用直接且不受保护的SQL命令,因为这是黑客执行SQL注入,窃取,修改甚至删除数据的方式。
  2. 一个好的方法是使用该mysql_real_escape_string(String s)功能。基本上,每个危险字符(/,", {, }, etc)的开头都带有一个斜线(/)。因此,基本上,这使字符串内的引号或斜杠无用。
  3. 最好的办法是使用准备好的语句。因此,您基本上会说:

    SELECT * FROM USERS WHERE username = ?
    
    Run Code Online (Sandbox Code Playgroud)

    稍后,您将问号替换为要输入的字符串作为用户名。这样做的好处是不会混淆PHP或任何其他容错语言,并使用这种简单且(有点怪异)优雅的解决方案仅用字符串替换此字符串,并告诉语言给出的只是字符串而已。仅此而已。

一切都很好,但是这部影片确实过时了。它于2013年问世,此后出现了许多新技术。因此,我尝试在互联网上搜索是否有任何新方法,或者是否有这种方法。但是问题是我要么找不到它,要么我发现一些超级混乱的东西。

因此,我的问题是:是否有更好的增强方法来对抗已引入的SQL注入,或者准备好的语句是否仍然是规范,以及它们是否容易受到任何形式的攻击?

php mysql sql sql-injection

2
推荐指数
1
解决办法
159
查看次数

我们如何使用Apache Airflow API创建Dataproc集群

我是Python和Airflow的新手,我已经在Python脚本中使用创建了4个任务pythonoperator。第一个和第二个任务从中GCP Bucket读取zip文件,然后读取数据,另一个任务是合并两个文件数据。现在,我需要再创建一个可以创建的任务Dataproc Cluster

我已经看到了Airflow API,但是我没有得到足够的信息和线索。有没有可以帮助您的例子?

提前致谢!

python google-cloud-platform google-cloud-dataproc airflow

2
推荐指数
1
解决办法
261
查看次数

将数组变成对象

我有一个包含iPhone模型和其后的4个值的元素数组,如下所示:

const arr = ['ip6s+', '35', '15',  '10', '10', 'ip7', '40', '20', '15', '15']
Run Code Online (Sandbox Code Playgroud)

我想把它变成一个看起来像这样的对象:

const Obj = {
   'ip6s+': ['35', '15',  '10', '10'],
   'ip7+' : ['90', '60', '35', '30']
}
Run Code Online (Sandbox Code Playgroud)

第一个对象是手机型号,第四个对象是它的值。怎么做?

javascript arrays sorting object

2
推荐指数
1
解决办法
71
查看次数

= =之前的单词有什么作用?

什么是ThisBit在下面的一行代码吗?

String Plaintext = sc.nextLine(), ThisBit = "";
Run Code Online (Sandbox Code Playgroud)

如果String调用了Plaintext,为什么ThisBit最后需要?

java

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

如何查看 FirestoreRecyclerAdapter 是否为空?

我想知道如何才能发现何时FirestoreRecyclerAdapter只有空。使用下面的代码,我可以发现它是否有一个或多个实例,但它不会告诉我什么时候里面没有对象。if(adapter.getItemCount == 0)每次都显示验证,因为适配器每次都通过0计数,所以显然这个功能不起作用。

那么如何才能发现它是否完全为空呢?

这是我的代码:

Query query = spotsCollection.whereEqualTo("cityId", cityId).limit(5);

FirestoreRecyclerOptions<Spots> options = new FirestoreRecyclerOptions.Builder<Spots>()
    .setQuery(query, Spots.class)
    .build();

FirestoreRecyclerAdapter<Spots, SpotViewHolder> adapter = new FirestoreRecyclerAdapter<Spots, SpotViewHolder>(options) {
    @Override
    protected void onBindViewHolder(@NonNull SpotViewHolder spotViewHolder, int i, @NonNull Spots spots) {
        if(i > 3)
            // Do something with i > 3
    }

    @NonNull
    @Override
    public SpotViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(getContext()).inflate(R.layout.recycler_app_spots, parent, false);
        return new SpotViewHolder(view);
    }
};

if(adapter.getItemCount() == 0)
    Toast.makeText(getContext(), "Empty", Toast.LENGTH_SHORT).show();
Run Code Online (Sandbox Code Playgroud)

java android google-cloud-firestore

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