2017-09-04 55 views
-1

我正在開發Android。我嘗試將藍牙對象發送給另一個活動。如何通過意圖將對象發送給Android中的其他Activity?

代碼

BluetoothSocket btSocket; 

Intent i = new Intent(ActivityA.this, ActivityB.class); 
i.putExtra(EXTRA_BT_SOCKET,btSocket); 
startActivity(i); 

但它似乎沒有工作,它顯示瞭如下錯誤:

無法解析法「putExtra(java.lang.String中, 機器人。 bluetooth.BluetoothSocket)

如何通過意向發送藍牙對象到另一個Act Android中的ivity?

在此先感謝。

+1

它顯示了什麼錯誤? – Kiya

+1

@Kiya it show無法解析方法'putExtra(java.lang.String,android.bluetooth.BluetoothSocket)。 – Wun

+0

據我所知,你只能傳遞可以實現Parcelable或Serializable接口的對象,所以我也被卡住了,所以我做的事情是讓對象成爲靜態的,並從其他類訪問它:public static BluetoothSocket btSocket;當我去其他活動時,我只是做了BluetoothSocket copyOfBtSocket = ActivityA.btSocket; – Pulkit

回答

1

使用以下方法來發送和檢索對象:

//要傳遞: intent.putExtra( 「MyClass的」,OBJ);

// To retrieve object in second Activity 
getIntent().getSerializableExtra("MyClass"); 
+0

如果您正在嘗試此操作,請確保您投射它@ i.putExtra(DeviceListActivity.EXTRA_ADDRESS,(Serializable)address); – Pulkit

+0

我試過了,它會在i.putExtra(「MyClass」,(Serializable)btSocket)上顯示'putExtra(java.lang.String,android.bluetooth.BluetoothSocket); – Wun

+0

檢索時使用getparceable()。 –

0

使用一個輔助類

public class BluetoothSocketHelper implements Serializable { 

    public BluetoothSocket btSocket; 

    //Constructor + getter/setters 
} 

從ActivityA發送:

BluetoothSocketHelper bluetoothSocketHelper; 

Intent i = new Intent(ActivityA.this, ActivityB.class); 
i.putExtra(DeviceListActivity.EXTRA_ADDRESS, address); 
i.putExtra(EXTRA_BT_SOCKET, bluetoothSocketHelper); 
startActivity(i); 

然後在ActivityB:

private BluetoothSocket btSocket; 

if(getIntent().getExtras()!=null){ 
    bluetoothSocketHelper = (BluetoothSocketHelper) getIntent().getSerializableExtra(EXTRA_BT_SOCKET); 
    btSocket = (BluetoothSocket) bluetoothSocketHelper.getBluetoothSocket(); 
} 
+0

只有聲明它實現了Serializable'',才能創建一個'BluetoothSocket'序列化。這是一個插座,它是連接到藍牙設備的插座。當你序列化和反序列化一些東西時,它會複製這個對象。你不能像這樣複製一個套接字。你不能以這種方式將一個套接字對象放入一個'Bundle'或一個'Intent'' extra「中。 –

-1

,你可以把它當作一個包通過的意圖

Bundle bundle = new Bundle(); 
bundle.putParcelable("yourObject key name", YOUR_OBJECT); //make YOUR_OBJECT implement parcelable 
Intent intents = new Intent(ActivityA.this, ActivityB.class); 
intents.putExtra(Constants.BUNDLE_DATA, bundle); 
startActivity(intents); 

在recieving結束(ActivityB.class)

if (intent != null && intent.hasExtra(Constants.BUNDLE_DATA)) { 
     Bundle bundle = intent.getBundleExtra(Constants.BUNDLE_DATA); 
     if (bundle != null && bundle.containsKey(yourObject key name)) { 
      Object yourObject = bundle.getParcelable(yourObject keyname); 
    } 
+0

OP正試圖傳遞一個'BluetoothSocket'。這個類沒有實現'Parcelable'或'Serializable',所以它不能放在'Bundle'中。 –

1

你不能把一個BluetoothSocket例如在Bundle或者把它作爲一個Intent 「額外」 這樣的。這將需要序列化和反序列化對象,這會製作對象的副本。你不能複製這樣的套接字。你想要做的就是在多個活動之間共享對象。最簡單的方法是將對象的引用放在某個變量的public static變量中,並從需要訪問的所有活動中使用它。

相關問題