如何通过意图将对象发送到Android中的另一个Activity?

时间:2017-09-04 06:03:33

标签: android android-intent bluetooth

我在Android中开发。我尝试将蓝牙对象发送到另一个活动。

代码

    BluetoothSocket btSocket;

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

但似乎无效,它显示的错误如下:

  

无法解析方法' putExtra(java.lang.String,   android.bluetooth.BluetoothSocket)

如何通过意图将蓝牙对象发送到Android中的其他活动?

提前致谢。

5 个答案:

答案 0 :(得分:2)

您不能将BluetoothSocket个实例放在Bundle中,也不能将其作为Intent“额外”传递给它。这将需要序列化和反序列化对象,这将生成对象的副本。你不能复制那样的套接字。你想要做的只是在多个活动之间共享对象。最简单的方法是在某个地方的public static变量中引用该对象,并在需要访问的所有活动中使用它。

答案 1 :(得分:1)

使用以下命令发送和检索对象:

//传递:     intent.putExtra(“MyClass”,obj);

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

答案 2 :(得分: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();
}

答案 3 :(得分:0)

嘿@Wun 我知道为时已晚,但我找到了一种简单的方法来做到这一点,在您的第一个活动中,只需启动活动并发送您的对象:

Intent intent = new Intent(this, Second.class);
intent.putExtra("rideId", yourObject);
startActivity(intent);

在第二个活动中:

String id = extras.getString("rideId");
try {
   JSONObject mJsonObject = new JSONObject(id);
} catch (JSONException e) {
   e.printStackTrace();
}

答案 4 :(得分:-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);

收到结束时(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);
    }