androidintent傳遞
① android intent 能傳遞多少個parcelable
android intent傳遞數據是沒有數量限制的,但是Parcelable是將數據存到內存中的ROM中,數量是沒有限制的,但是一個android應用進程最大使用16MB的內存。
Intent是一種運行時綁定(run-time binding)機制,它能在程序運行過程中連接兩個不同的組件。通過Intent,你的程序可以向Android表達某種請求或者意願,Android會根據意願的內容選擇適當的組件來完成請求。比如,有一個Activity希望打開網頁瀏覽器查看某一網頁的內容,那麼這個Activity只需要發出WEB_SEARCH_ACTION給Android,Android就會根據Intent的請求內容,查詢各組件注冊時聲明的IntentFilter,找到網頁瀏覽器的Activity來瀏覽網頁。
在Android中實現Parcelable介面的類可以支持序列與反序列化,以下是一個實現的舉例:
1. 實現Parcelable介面
2. 添加實體屬性
3. 覆寫writeToParcel(Parcel dest, int flags)方法,指定寫入Parcel類的數據。
4. 創建Parcelable.Creator靜態對象,有兩個方法createFromParcel(Parcel in)與newArray(int size),前者指定如何從Parcel中讀取出數據對象,後者創建一個數組。
5. 覆寫describeContents方法,默認返回0。
② Android Intent 如何接收到指定的Intent傳遞過來的值呢
首先,盡量不要用try{}catch去捕捉能用判斷規避的異常,那樣會影響效率,每次出現異常,虛擬機要抓錯誤調用堆棧。所以,最好的方式是通過判斷去規避。
按你的思路,可以先判斷getIntent.getExtras()是否為null。
Intent
_getIntent
=
this.getIntent();
if(
_getIntent.getExtras()
!=
null){
Log.i("YuryLog","理論上只有點了確認鍵才執行");
receiveName
=
_getIntent.getExtras().getString("sendName");
receiveEatSomething
=
_getIntent.getExtras().getString("sendeatSomething");
receiveCopies
=
_getIntent.getExtras().getString("sendcopies");
......
要指出的是,上述代碼,最好使用getXXXExtra這類方法,它不會出現空指針(除了少數幾個,比方說getStringExtra)。
需要設定默認值的,在沒有值時它會返回默認值;沒有設置默認值的,在沒有值時會返回null,針對這類判空一下。
可以看下getBooleanExtra的源碼:
public
boolean
getBooleanExtra(String
name,
boolean
defaultValue)
{
return
mExtras
==
null
?
defaultValue
:
mExtras.getBoolean(name,
defaultValue);
}
而getExtras()在沒有值時會返回null,看下源碼:
public
Bundle
getExtras()
{
return
(mExtras
!=
null)
?
new
Bundle(mExtras)
:
null;
}
所以,最好不要用getIntent().getExtras()這種方式,換用getIntent().getXXXExtras(),這樣針對有設置默認值的就不需要判空了。
activity之間傳值,是沒有機制可以確定哪個activity傳過來的。這是考慮到代碼的可擴展性,解耦。要確定哪個activity發過來,在intent創建那裡多傳個布爾值就行,比方說下面的代碼。
發送
intent.putExtra("fromXXActivity",
true);
接收
if
(getIntent().getBooleanExtra("fromXXActivity",
false))
{
......
//
這里,你就可以安全的接收那個activity發過來的所有值。
}
③ android intent 傳數據問題,能否確定傳入的數據來自哪個activity
完全可以,只需要往intent裡面添加一個標識數據即可
//兩個activity
java">//第一個activity
{
privateButtonbtn;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
Intentintent=newIntent(OneActivity.this,EditActivity.class);
intent.putExtra("from",1);
startActivity(intent);
}
});
}
}
//第二個activity
{
privateButtonbtn;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
Intentintent=newIntent(OneActivity.this,EditActivity.class);
intent.putExtra("from",2);
startActivity(intent);
}
});
}
}
編輯activity,判斷intent傳進來的from數據,為1即為OneActivity,2為TwoActivity
{
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intentintent=getIntent();
intfrom=intent.getIntExtra("from",0);
switch(from){
case1:
//OneActivity
break;
case2:
//TwoActivity
break;
//case.......
}
}
}
④ 安卓 intent 怎麼傳遞一個對象
這個傳遞了一個user類的對象,在user類中需要(implements
Serializable)實現這個介面
Intent
intent=new
Intent();
Bundle
extras=new
Bundle();
extras.putSerializable("aaa",
user);
intent.putExtras(extras);
⑤ android開發intent怎麼傳遞集合
1、Intent(意圖)主要是解決Android應用的各項組件之間的通訊。
2、為了實現傳遞數據這個目的需要以下步驟
3、Activity1需要構造一個 Intent,這個Intent用於告訴系統,我們要做「查看」動作
intent可調用putExtra來存放想要傳遞的數據
4、然後調用setClass,設置Activity1和欲調用的組件Activity2
5、最後調用startActivity將構造的Intent傳入,系統會根據此Intent中的描述,到Activity1中找到滿足此Intent要求的Activity,系統會調用找到的 Activity2最終傳入Intent在Activity2中可使用getIntent來獲取傳遞的Intent,並通過獲取數據的方法來獲取數據代碼示例:
Intent intent = new Intent(); // Activity1
intent.putExtra("one", num1);
intent.putExtra("two", num2);
intent.setClass(FirstActivity.this, SecondActivity.class);
startActivity(intent); Intent intent = getIntent(); //Activity2
String num1 = intent.getStringExtra("one");
String num2 = intent.getStringExtra("two");
int ret = Integer.parseInt(num1) + Integer.parseInt(num2);
result.setText(ret+"");
注意:在使用intent的時候可以使用bundle傳遞復制的數據類型。
⑥ intent傳值是如何傳的
intent翻譯為中文的意思是意圖,目的。它的作用就是調用某個組件去做某一個事情。比如從當前運行的activity跳轉到另一個activity,當前activity要啟動一個service或啟動一個broadcastreceive(廣播接收器),此時就需要用intent來完成。簡單的說intent是各個組件的一個橋梁。既然充當了橋梁的角色,那麼intent就該可以傳遞數據,把當前的組件的數據傳遞到另一個組件去使用,那麼intent是如何來傳遞值的呢?通過Intent類提供的setData()和putExtra()方法傳遞。前一個參數是uri,是個標識比如一個文件的路徑等。後一個參數可以是值也可以是對象,以鍵值對的形式傳遞。 ActivityA:Intent intent=new Intent(); intent.setClass(ActivityA.this,ActivityB.class); intent.putExtra("extra ", "Welcome to ..."); startActivity(intent);ActivityB:Intent intent=getIntent(); String stringValue=intent.getStringExtra("extra");如果把stringValue的值改變,ActivityA中extra所對應的值不會變。 intent.setClass(ActivityA.this,ActivityB.class); Student s=new Student("shao",20); intent.putSerializable("STUDENT ", s);startActivity(intent);ActivityB:Intent intent=getIntent();Student s=intent.getSerializable("STUDENT");現在如果把ActivityB中得到的Student對象s ,改變一個值,如s.setName("yang");那麼ActivityA里的s會變嗎?不會變,因為intent傳遞對象時,傳遞的是一個副本(深拷貝)。 所以在android中,intent進行數據傳遞時,基本數據類型和對象傳遞的都是副本,改變傳遞過來的值,不會改變原來的值。注意的是在進行對象傳遞的時候,該對象所對應的類要實現Serializable介面或Parcelable介面。
⑦ android intent 傳遞
getApplicationContext()
這個返回的是Application實例
你應該換成你的類名.this
另外two_btn.class,這個two_btn是Activity嗎,有沒有到manifest注冊
⑧ Android Intent的作用,哪些類型的數據可以被傳遞
(1) 要激活一個新的Activity,或者讓一個現有的Activity執行新的操作,可以通過調用Context.startActivity()或者Activity.startActivityForResult()方法。這兩個方法需要傳入的Intent參數也稱為Activity Action Intent(活動行為意圖),根據Intent對象對目標Activity描述的不同,來啟動與之相匹配的Activity或傳遞信息。
(2) 要啟動一個新的服務,或者向一個已有的服務傳遞新的指令,調用Context.startService()方法或調用Context.bindService()方法將調用此方法的上下文對象與Service綁定。
Intent一旦發出,Android都會准確找到相匹配的一個或多個Activity、Service或Broadcast-Receiver作為響應。所以,不同類型的Intent消息不會出現重疊:BroadcastIntent消息只會發送給BroadcastReceiver,而絕不可能發送給Activity或Service。由startActivity()傳遞的消息也只可能發送給Activity,由startService()傳遞的Intent只可能發送給Service。
向下一個Activity傳遞數據(使用Bundle和Intent.putExtras)
Intent it = new Intent(Activity1.this, Activity2.class);
Bundle bundle=new Intent();
bundle.putString("name", "This is from MainActivity!");
it.putExtras("bd",bundle); // it.putExtra(「test」, "shuju」);
startActivity(it); // startActivityForResult(it,REQUEST_CODE);