2014-06-15 71 views
0

我一直在嘗試我的手在Android開發上,並在http://developer.android.com/給出的指南後,我遇到putExtra(),並想知道是否有人可以向我解釋這個函數做什麼?以下代碼如何工作?putExtra()如何工作?它的參數如何工作?這兩個參數意味着什麼?

要發送:

Intent intent = new Intent(this, DisplayMessageActivity.class); 
EditText editText = (EditText) findViewById(R.id.edit_message); 
String message = editText.getText().toString(); 
intent.putExtra(EXTRA_MESSAGE, message); 

,用於接收:

Intent intent = getIntent(); 
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE); 

如何都是2層的功能,getStringExtra和putExtra,在該代碼工作?

+1

你的意思是如何Android的處理過程在後臺或只是一般它是如何在一般的應用程序使用? – zgc7009

+0

[如何使用putExtra()和getExtra()作爲字符串數據的重複](http://stackoverflow.com/questions/5265913/how-to-use-putextra-and-getextra-for-string-data) – hungryghost

+0

我的疑問是,putExtra()是如何工作的?我的意思是它如何在2個參數上工作?如果它存儲EXTRA_MESSAGE +消息,然後提取爲什麼我只是收到消息方,而不是EXTRA_MESSAGE中寫入的內容? – user1712778

回答

2
Intent intent = new Intent(this, DisplayMessageActivity.class); // sets target activity 
EditText editText = (EditText) findViewById(R.id.edit_message); // finds edit text 
String message = editText.getText().toString(); // pull edit text content 
intent.putExtra(EXTRA_MESSAGE, message); // shoves it in intent object 

比方說這個=活動A,和你的DisplayMessageActivity =活動B

在這種情況下,你獲得從活動一編輯文本的內容和你在使用意圖對象傳達其內容活動B 。活動B,中值是感興趣的,必須將其拉出意向對象的,所以它會做一般在其的onCreate()以下:

Intent intent = getIntent(); 
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE); 

這通常是幸福的,但常見的情況。

但是,如果活動B在堆棧中已經存在,並且活動A想清楚返回堆棧再次達到活動B,活動B將有一個新意圖在其onNewIntent交付(意向theNewIntent)方法,你將不得不在活動B中重寫以查看此新意圖。否則,你會被卡住,處理最初收到的活動B的原意。

修訂

聽起來像你感興趣的意圖的內部,以及你如何得到的意圖的「EXTRA_MESSAGE」的一部分。意圖存儲鍵值對,所以如果你想要得到的重要組成部分,something like the following would work

for (String key : bundle.keySet()) { 
    Object value = bundle.get(key); 
    Log.d(TAG, String.format("%s %s (%s)", key, 
     value.toString(), value.getClass().getName())); 
} 

的內部的快速概覽是意圖使用Android的IPC(進程間通信)。實質上,對操作系統友好的唯一數據類型是原始類型(int,long,float,boolean等),這就是爲什麼putExtra()只允許存儲原語的原因。然而,putExtra()也允許包容性,並且任何將自身定義爲Parcelable的對象基本上定義了Java對象如何向下流入其基元,從而允許意圖再次處理這些友好的數據類型,因此在那裏沒有魔法。這很重要,因爲Intents充當Binder層的包裝。 Binder層是Intent對象的基礎結構,並且此實現位於Android的本機層(c/C++部分)中。實際上,本地層處理編組/解組備份到java層,您的活動B獲取數據。

I realize this simplification might be skipping too many details, so reference this pdf for better understanding.

+0

嗨,瑞恩,我有意圖的一部分,我只是對getExtra()用它的參數做什麼感到困惑?我的意思是,EXTRA_MESSAGE和消息會發生什麼情況,並且如果有某種處理,它是否存儲在某個地方或者是否像頻道一樣,putExtra()會從getStringExtra()中獲取,如果是這種情況,爲什麼只檢索「消息」部分,而不是「EXTRA_MESSAGE」中寫入的內容,「MainActivity.EXTRA_MESSAGE」代表什麼? – user1712778

相關問題