Попытка десериализации объекта, отправленного через Bluetooth - PullRequest
0 голосов
/ 13 марта 2019

Попытка десериализации объекта, отправленного по Bluetooth с одного устройства Android на другое.

Размер объекта составляет 126 байт, и я принимаю именно этот размер.Однако я получаю класс не найдено исключение.

Код для десериализации:

public static EcgDataPoint deserialize(byte[] bytes) throws IOException, ClassNotFoundException {
        ByteArrayInputStream b = new ByteArrayInputStream(bytes);
        ObjectInputStream o = new ObjectInputStream(b);
        return (EcgDataPoint) o.readObject();
    }

Ошибка:

tech.abhinavdas.bluetooth D/BluetoothReaderThread: Data type doesn't match
    java.lang.ClassNotFoundException: tech.abhinavdas.bluetoothpairingclient.models.EcgDataPoint
        at java.lang.Class.classForName(Native Method)
        at java.lang.Class.forName(Class.java:453)
        at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:628)
        at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1615)
        at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1520)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1776)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:373)
        at tech.abhinavdas.bluetooth.models.EcgDataPoint.deserialize(EcgDataPoint.java:54)
        at tech.abhinavdas.bluetooth.threads.BluetoothReaderThread.deserializeAndRead(BluetoothReaderThread.java:47)
        at tech.abhinavdas.bluetooth.threads.BluetoothReaderThread.run(BluetoothReaderThread.java:38)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "tech.abhinavdas.bluetoothpairingclient.models.EcgDataPoint" on path: DexPathList[[zip file "/system/framework/org.apache.http.legacy.boot.jar", zip file "/data/app/tech.abhinavdas.bluetooth-EZqoTdreOfJT1jU4xbF9dg==/base.apk"],nativeLibraryDirectories=[/data/app/tech.abhinavdas.bluetooth-EZqoTdreOfJT1jU4xbF9dg==/lib/arm64, /system/lib64]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at java.lang.Class.classForName(Native Method) 
        at java.lang.Class.forName(Class.java:453) 
        at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:628) 
        at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1615) 
        at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1520) 
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1776) 
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353) 
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:373) 
        at tech.abhinavdas.bluetooth.models.EcgDataPoint.deserialize(EcgDataPoint.java:54) 
        at tech.abhinavdas.bluetooth.threads.BluetoothReaderThread.deserializeAndRead(BluetoothReaderThread.java:47) 
        at tech.abhinavdas.bluetooth.threads.BluetoothReaderThread.run(BluetoothReaderThread.java:38) 

Чего мне не хватает?

1 Ответ

0 голосов
/ 13 марта 2019

У вас есть два типа с одинаковым именем:

tech.abhinavdas.bluetooth.models.EcgDataPoint

и

tech.abhinavdas.bluetoothpairingclient.models.EcgDataPoint

Итак: в этой строке кода:

return (EcgDataPoint) o.readObject();

Убедитесь, чтотип, к которому вы применяете это tech.abhinavdas.bluetoothpairingclient.models.EcgDataPoint.

Кроме того, дважды проверьте, что у вас нет несовпадающей версии кода на отправляющей стороне (эти два пакета выглядят очень похожимив названии).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...