Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.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中的请求代码值有什么建议吗?_Android - Fatal编程技术网

Android中的请求代码值有什么建议吗?

Android中的请求代码值有什么建议吗?,android,Android,现在我使用随机数作为请求代码。因此,每次我为startActivityForResult添加新活动时,我都需要检查所有其他此类活动以避免冲突。是否有任何定义价值的实践,设计不可冲突? 你认为呢?增加一个数字可以保证不会发生碰撞(直到包装完成)。实际上应该 除非你大量使用它们,否则不会发生 您可以向项目中添加一个类,该类为您提供编号。比如说 public class GlobalStuff { private static final AtomicInteger seed = new At

现在我使用随机数作为请求代码。因此,每次我为startActivityForResult添加新活动时,我都需要检查所有其他此类活动以避免冲突。是否有任何定义价值的实践,设计不可冲突?
你认为呢?

增加一个数字可以保证不会发生碰撞(直到包装完成)。实际上应该 除非你大量使用它们,否则不会发生

您可以向项目中添加一个类,该类为您提供编号。比如说

public class GlobalStuff {
    private static final AtomicInteger seed = new AtomicInteger();
    public static int getFreshInt() {
        return seed.incrementAndGet();
    }
}
现在,在您的代码中,当您需要使用数字而不是

public void doSomething() {
    startActivityForResult(intentA, 342);
}
喜欢吗

private static final int REQUEST_CODE = GlobalStuff.getFreshInt();
public void doSomething() {
    startActivityForResult(intentA, REQUEST_CODE);
}
你不用同一个号码打两次就安全了。至少当代码在同一进程中运行时


唯一的问题是,您不能在
switch
语句中使用这些数字(如
case REQUEST\u code:
),因为switch需要编译时已知的数字,实际上您不需要检查所有的活动,如果在不同的活动中有相同的值,也没什么关系

请求代码的思想是,在Activity X中,在ActivityResult()中,您可以区分以
startActivityForResult()开始的不同请求的结果


因此,如果在“活动”中有3个不同的
startActivityForResult()
调用,则需要3个不同的请求代码,以便能够在
onActivityResult()
中区分它们,这样您就可以知道哪个结果属于哪个开始。但是,如果您有另一个活动Y,您正在做类似的事情,那么当请求代码与活动X中的代码相同时,这并不重要。

如果您仍然需要检查一个活动的结果,并且喜欢视觉抛光的结构,请检查此方法

在活动类内声明内部类:

class RequestCode {
    static final int IMPORT = 100;
    static final int WRITE_PERMISSION = 101;
}
启动活动时使用代码:

startActivityForResult(intent, RequestCode.IMPORT);
检查结果:

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == RequestCode.IMPORT && resultCode == RESULT_OK) {
        //...
    }
}

我只使用随机数(在编译时生成),从来没有遇到过任何问题-但这是一个好问题。您可以在全局hashmap的帮助下在switch语句中使用它,可能吗?这种方法非常有效。。直到第三方库决定执行类似操作为止。@S.D.什么样的库可以在没有您管理的情况下启动活动?@atasoyh none,当您将库添加到随机启动活动的项目中时,这只是一个假设问题。有些库可以启动zxing条形码扫描仪之类的活动,但您可以控制它是如何启动的。在几乎所有情况下,使用什么请求代码也不相关。只需放置0,您无需区分活动结果这是一个非常糟糕的解决方案,因为根据用户所做的操作,代码可能会有所不同。此外,如果进程被终止,它也不能正常工作。想象一下,你开始了一项活动,结果是挑选一张照片,系统杀死了你的应用程序,你检查了请求代码,结果不匹配。这是一个很好的答案。它触及了问题的根源,这就是理解为什么您首先需要请求代码,并且它们不需要是全局唯一的。这可能在文档中的某个地方,但如果是,我没有看到。尽管这个答案是有效的,但我认为在所有活动中始终使用不同的
REQUEST\u code
是一种良好的做法。无论何时将功能导入到“活动”中,都需要确保请求代码不同,而无需检查该特定“活动”中的所有
startActivityForResult()
调用/fragments@MarioLenci但要获得所有不同的请求代码,您必须检查所有startActivityForResult()在你所有的活动和片段中,而不仅仅是一个。