1

这是我在 Stack Overflow 上的第一个问题,希望我能找到您解决我面临的问题的专业知识。

我试图实现一个 Parcelable 代码。让我告诉你 -

  1. 我有一个 ConnectDevice 类,当被调用时,它会通过蓝牙与附近的任何设备建立连接。
  2. 我在服务中调用 ConnectDevice - 我的意思是 - 当我调用此服务时 - 它会在 android 和其他设备之间建立连接。
  3. 我需要此连接可用于我的其他应用程序以对其进行一些操作。
  4. ConnectDevice 对象有一个名为“bluetoothDeviceHandler”(类型为 BluetoothDeviceHandler 类)的静态变量,所有其他应用程序都需要该变量来驱动操作。

因此,要使其可用于其他应用程序 -

  1. 我已将 ConnectDevice 类设为 Parcelable。

  2. 我正在将名为“cd”的 ConnectDevice 对象(在服务中实例化之后)写入包裹,以便我可以以相同的状态将其读回并可以访问其变量cd.bluetoothDeviceHandler

  3. 除了将其转换为 json 对象之外,我无法将对象本身写入包裹中。

    gson = new Gson();
    System.out.println("Connect Device : " + deviceHandler);  
    String handler = gson.toJson(deviceHandler);  
    dest.writeString(handler);  
    

后来我使用相同的策略解组它

    handler = in.readString();
    System.out.println("Handler String " + handler);
    deviceHandler = gson.fromJson(handler, ConnectDevice.class);
    System.out.println("Handler " + deviceHandler);

但无论我尝试什么 - 我最终将 cd 设置为 null...(在绑定到服务之后)因此我无法在其他应用程序中访问 ConnectDevice 的任何方法或变量。

以下是我的服务代码

public void onStart(Intent intent, int startId) {
    // TODO Auto-generated method stub
    super.onStart(intent, startId);
    cd = ConnectDevice.getConnection(ConnectService.this);
    cd.deviceHandler = cd;
    // cd.connectDevice("00:06:66:47:57:80");
    cd.connectDevice("00:06:66:47:E4:42");

}

@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub

    return new IHandler.Stub() {

        @Override
        public ConnectDevice getHandler() throws RemoteException {
            // TODO Auto-generated method stub
            System.out.println("I am here client connected");

            return cd;
        }
    };
}

这是我的示例 ConnectDevice 类

public class ConnectDevice implements Parcelable                                        
{   
    public static BluetoothDeviceHandler bluetoothDeviceHandler = null;  
    public static ConnectDevice deviceHandler = null;   

    /* there are lot of codes which sets the bluetoothdeviceHandler when   
      the device is connected over bluetooth.(In service, after calling  
      cd.connect) deviceHandler will be set once the service initializes  
      this class as  */ 


    /*So, I am parcelling this deviceHandler object so that I can access all
      of its method and variable in other applications...( I did not want to
      connect in each application rather centralizing and accessing the same
      connection across the application)*/ 

        @Override
        public void writeToParcel(Parcel dest, int flags) {
            // TODO Auto-generated method stub

            gson = new Gson();
            System.out.println("Connect Device : " + deviceHandler);
            String handler = gson.toJson(deviceHandler);
            dest.writeString(handler);

        }

        void readFromParcel(Parcel in) {

                 handler = in.readString();
             System.out.println("Handler String " + handler);
             deviceHandler = gson.fromJson(handler, ConnectDevice.class);
             System.out.println("Handler " + deviceHandler);
        }

        public static final Parcelable.Creator<ConnectDevice> CREATOR =   
                                new Parcelable.Creator<ConnectDevice>() {
            public ConnectDevice createFromParcel(Parcel in) {

                return new ConnectDevice(in);
            }

            public ConnectDevice[] newArray(int size) {
                return new ConnectDevice[size];
            }
        };

我的另一个应用程序正确绑定。但我没有得到对象,它总是为空。我不确定为什么。

4

0 回答 0