为什么要初始化额外的密钥?

时间:2013-11-03 11:29:34

标签: android android-intent

当我们想要将一些数据传递给另一个应用程序组件时,我们会使用额外的那个意图。意图只是一个键值对。 我们首先将我们的键定义为公共常量,并赋予它一个值。 e.g。

public static final String extra_key = "com.example.myapp.MESSAGE";

我们还必须为密钥分配意图需要携带的数据。 e.g。

String extra_value = editText.getText().toString();

然后我们额外增加了意图:

intent.putExtra(extra_key, extra_value);

我的问题:

  1. 为什么密钥必须公开?

  2. 为什么我们首先需要初始化密钥,为什么我们不能只声明它,因为它将被分配一个值(数据到 无论如何都要被意图携带。那么为什么我们不能做点什么呢 比如public static final String extra_key;

  3. 我已经读过,密钥值应该包含反向域名,以便在其他软件包插入时它是唯一的。但是 无论如何都要给它一个独特的价值 分配了另一个值,该值是由...承载的数据 意图。

  4. 提前谢谢。

4 个答案:

答案 0 :(得分:4)

Why does the key have to be public?

没有。这不是关于意图额外或关键值对的问题。这只是一个关于Java变量范围和可见性的问题。

在调用课程时:

intent.putExtra("KEY_NAME", "Key_Value");

接收组件:

intent.getStringExtra("KEY_NAME");

这项工作很好。 良好做法是将其设为public final static,以便发件人和收件人可以使用相同的常量名称。

Why do we need to intialize the key in the first place, why can't we just declare it, because it will be assigned a value (the data to be carried by the intent) anyway. So why couldn't we do something like

见上文。键名只不过是一个字符串。密钥承载数据,值为。

I have read that the key value should include the reverse domain name

这没有任何意义。关键值是发送者想要发送给接收者的任何数据。或者你的意思是关键名称?密钥的名称必须由接收方知道,因此如果此意图是启动外部组件,则必须使用接收方定义的密钥名称。如果意图是内部组件,那么您将名称定义为您想要的任何名称。我认为没有充分理由包含包名。它只是使用更多的内存。

答案 1 :(得分:1)

该键用于存储和检索值。您可以将其视为HashMap的键。

  1. 因为您可能希望在多个位置重复使用相同的密钥(例如,在活动中存储值并在另一个中检索值)
  2. 当你成为静态成员时,意味着它不属于对象的特定实例,但该类的所有对象都将共享它。如果删除static关键字,可以在构造函数中初始化变量,但在这种情况下,它属于对象实例,并且它不是常量
  3. 如果您需要澄清,请随时提出

答案 2 :(得分:0)

  1. 为什么密钥必须公开?
  2. 您可能希望在其他类中使用该键来获取值,以便将其设置为静态和公共。

    在其他活动中

       String s = getIntent().getStringExtra(MainActivity.extra_value);
       // considering extra_value is static in MainActivity 
    

    你不需要这样。

     intent.putExtra("mykey", extra_value);
    

    然后在其他活动中检索

      String s = getIntent().getStringExtra("mykey");  // keys must match
    

    变量extra_key被声明为字符串并初始化,它是静态的。

    静态修饰符与最终修饰符一起用于定义常量。最终修饰符表示此字段的值不能更改。

    以这种方式定义的常量无法重新分配,如果您的程序尝试这样做,则是编译时错误。

    检查主题constants.

    public static final String extra_key= "com.example.myapp.MESSAGE";
    

    Java: define terms initialization, declaration and assignment

    http://developer.android.com/reference/android/content/Intent.html

答案 3 :(得分:0)

我只是想添加一个包名称作为密钥标识符,正如我在评论中看到的那样,不是必须的,但这是一个很好的做法。

根据此https://developer.android.com/training/basics/firstapp/starting-activity.html#BuildIntent