【发布时间】:2022-01-02 03:15:13
【问题描述】:
我需要将文件和数据传输到可穿戴设备并使用ChannelClient。我正在发送各种数据(一个文件和各种变量),因此 getInputStream 和 getOutputStream 似乎是正确的方法(而不是发送文件)。
如何将变量集合与文件打包并将它们发送到 outputStream 中,以及如何从 inputStream 中解压缩它们?
使用以下代码时出现此错误:java.lang.ClassNotFoundException: d.b.a.m.a:
电话
String node = settingsRepository.getNode();
String path = "/channel/mobile";
ChannelClient channelClient = Wearable.getChannelClient(getContext());
channelClient.openChannel(node,path).addOnSuccessListener(new OnSuccessListener<ChannelClient.Channel>() {
@Override
public void onSuccess(ChannelClient.Channel channel) {
Log.d(TAG, "onSuccess: ");
channelClient.getOutputStream(channel).addOnSuccessListener(new OnSuccessListener<OutputStream>() {
@Override
public void onSuccess(OutputStream outputStream) {
Log.d(TAG, "channelClient.getOutputStream.onSuccess: ");
File file = new File("/data/user/0/com.xxx.yyy/files/icon-8.png");
TestObject testObject = new TestObject("test",file);
Log.d(TAG, "channelClient.getOutputStream.onSuccess: name=" + testObject.getName());
ObjectOutputStream out = new ObjectOutputStream(outputStream);
out.writeObject(testObject);
out.flush();
out.close();
}
})
}
})
我如何在可穿戴设备上拆包?
可穿戴
Task<InputStream> inputStreamTask = Wearable.getChannelClient(getApplicationContext()).getInputStream(channel);
inputStreamTask.addOnSuccessListener(new OnSuccessListener<InputStream>() {
@Override
public void onSuccess(InputStream inputStream) {
Log.d(TAG, "addOnSuccessListener.onSuccess: ");
try {
ObjectInputStream in = new ObjectInputStream(inputStream);
TestObject testObject = (TestObject) in.readObject();
Log.d(TAG, "addOnSuccessListener.onSuccess: name=" + testObject.getName());
} catch (Exception e) {
Log.d(TAG, "addOnSuccessListener.onSuccess: error=" + e.getMessage());
e.printStackTrace();
}
}
});
TestObject 类
public class TestObject implements Serializable {
String name;
File file;
public TestObject(String name, File file) {
this.name = name;
this.file = file;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
}
【问题讨论】:
-
您写入输出流的内容就是您从输入流中读取的内容。因此,只需尝试一些字符串和线条开头。
-
我改了句。希望能帮助到你。我使用其他方法来发送字符串或文件,但我需要在同一个通道/连接中发送两者。如何将它们捆绑在一起并在另一侧拆包?
-
the getInputStream and getOutputStream seem to be the right approach如果您的意思是:发送方将数据写入输出流,接收方从输入流中读取数据,那么是的,这是正常的方法。 -
How do I bundle them together and unpack them on the other side?这完全取决于您。正如你所写的那样,你也知道如何阅读并且必须解释读取的数据。 -
您是否曾经使用 inputStream/outputStream 打包带有变量的文件?如果是这样,你是怎么做到的?你有一个例子吗?是否有我应该扩展的特定对象来执行此操作?