当我们想要将一些数据传递给另一个应用程序组件时,我们会使用额外的那个意图。意图只是一个键值对。 我们首先将我们的键定义为公共常量,并赋予它一个值。 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);
我的问题:
为什么密钥必须公开?
为什么我们首先需要初始化密钥,为什么我们不能只声明它,因为它将被分配一个值(数据到
无论如何都要被意图携带。那么为什么我们不能做点什么呢
比如public static final String extra_key;
我已经读过,密钥值应该包含反向域名,以便在其他软件包插入时它是唯一的。但是 无论如何都要给它一个独特的价值 分配了另一个值,该值是由...承载的数据 意图。
提前谢谢。
答案 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的键。
如果您需要澄清,请随时提出
答案 2 :(得分:0)
您可能希望在其他类中使用该键来获取值,以便将其设置为静态和公共。
在其他活动中
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