这是一个真正的noob问题,我确定,但我觉得这很令人困惑。
为什么地球会想要使用intent.putExtra方法在Android中的类之间共享信息?
让我解释一下。我按照开发人员指南的说明制作了我的第一个Android应用程序(我已经使用Java处于中等水平)并且我正在使用一些看起来像这样的代码:
//类字段
//key holds string????? not fully understanding this...
public static final String EXTRA_MESSAGE = "self.anon.myfirstapp.MESSAGE";
//this method is activated by a button being pressed
public void sendMessage(View view) {
Intent intent = new Intent(this,DisplayMessageActivity.class);
EditText editText = (EditText) findViewById(R.id.edit_message);
String message = editText.getText().toString();
//puts string message inside the string EXTRA_MESSAGE - why????
intent.putExtra(EXTRA_MESSAGE, message);
startActivity(intent);
}
好的,首先我要指出我看到发生了什么,大部分是如何工作的(我只是被字段声明混淆=" myClassPath"为什么?)...
但....
当然,只要有一个名为的静态字段会更容易:
public static String message;
然后我的方法看起来像这样:
public void sendMessage(View view) {
Intent intent = new Intent(this,DisplayMessageActivity.class);
EditText editText = (EditText) findViewById(R.id.edit_message);
message = editText.getText().toString();
startActivity(intent);
}
然后当我的类DisplayMessageActivity需要他刚才调用的字符串消息时:
String message = myClass.message;
这似乎更直接。什么是新字符串EXTRA_MESSAGE的创建,它似乎保持字符串消息以及为什么当我的其他类直接访问此信息时发送它的意图 - 以及" self的字段声明是什么.anon.myfirstapp.MESSAGE"意思?我找不到任何这样的文件夹或路径。
答案 0 :(得分:0)
intent.putExtra(EXTRA_MESSAGE,message);
的工作方式类似于键值对,当您想要从意图中检索信息时,您只需执行intent.get<type>Extra
并获取所述信息,在本例中为intent.getStringExtra("self.redway.myfirstapp.MESSAGE')
。它只是检索信息的关键,它不一定是你的整个类路径。
它可以很容易intent.putExtra("message",message)
。
在将您不一定要透露的信息传递给其他类时,它们会很有帮助,但您确实希望它能够以我发现的其他方式获取该信息。
答案 1 :(得分:0)
message = myClass.message 并不总是确定这会保留其值,尤其是在扩展Android框架类(如Activity)时。重新创建活动(更改屏幕方向)后,消息可能会丢失其当前值并被分配默认值。如果消息是静态字段,则 myClass.message 将起作用,否则您需要为活动类的对象提供getter和setter方法。根据我的经验,创建活动类对象是闻所未闻的。
答案 2 :(得分:0)
正如其他人所说的那样,通常情况下(例如屏幕旋转)Android系统会破坏并重新启动应用程序 - 因此所有可变数据都会丢失。如果您的数据被硬编码为最终变量,它将始终以您的方式工作。这不是使用意图的唯一原因。
使用意图传递信息的好处在于,您不仅可以使用意图与您自己的应用程序中的子活动进行通信,还可以使用安装在该Android系统上的任何活动。例如,您可能想要启动一个启动电话应用程序的意图,并将您想要呼叫的号码作为额外包含。
或许比你更好的问题是“你为什么不使用意图传递信息?” intent.putExtra()
方法允许你方便灵活和直接的方法传递尽可能多的您可以安全可靠地获取任何其他活动信息。