我能够将自定义对象发送到我的 .net 网络服务,并且我的网络方法工作得非常好。我在多部手机上测试了该代码,结果是成功的,但是当我在三星手机上尝试它时,它开始给我异常。
我发现问题是 MemoryOutOfException 发生的,因为我已经录制了大尺寸的视频并试图将其转换为 byte[] 但我被期望录制质量较低的视频,这些视频在 Micromax 和摩托罗拉工作但在三星(其余品牌我还不知道)。
takeVideoIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY,
MYVIDEOQUALITY);
所以这是我认为我应该拥有的一些解决方案:
1. 要么从所有移动设备录制较小尺寸的视频Camera Intent
(不适用于三星)。
2. 或者对您的视频上传方法进行编码,使其分块上传视频。但我必须发送有关视频的更多信息,所以我创建了自定义对象来处理它,我也实现KVMSerializable
并使用了它Marshal
。现在我不知道如何分块发送大型自定义对象。
我已经看到了这个,但我没有发现我可以发送附加信息。它只发送视频文件。
如果我不够清楚,请让我知道我应该提供哪些更多信息。
这是我用来上传视频的代码:
private String SaveMedia(String Email, byte[] Media, String MediaType,
String MediaExt) {
SoapSerializationEnvelope envelope;
SoapObject request = new SoapObject(
HelpMeConstant.WSDL_TARGET_NAMESPACE, "SaveMedia");
// Log.i(TAG, "Email : " + Email + ", Media : " + Media + "MediaType : " + MediaType + ",MediaExt : " + MediaExt);
MediaAvidance mediainfo = new MediaAvidance();
mediainfo.EmailId = Email;
mediainfo.Media = Media;
mediainfo.MediaExt = MediaExt;
mediainfo.MediaType = MediaType;
PropertyInfo pi = new PropertyInfo();
pi.setName("avidanceinfo");
pi.setValue(mediainfo);
pi.setType(mediainfo.getClass());
request.addProperty(pi);
envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
// Log.i("SaveMedia", "Serialising..");
new MarshalBase64().register(envelope);
envelope.dotNet = true;
envelope.headerOut = HelperMethod.addAuthentication();
envelope.implicitTypes = true;
envelope.setOutputSoapObject(request);
HttpTransportSE httpTransport = new HttpTransportSE(
HelpMeConstant.SOAP_ADDRESS);
Object response = null;
try {
// Log.i("SaveMedia", "Calling service..");
httpTransport.call(HelpMeConstant.SOAP_ACTION + "SaveMedia",
envelope);
// Log.i("SaveMedia", "getting response..");
response = envelope.getResponse();
} catch (Exception exception) {
// Log.e("SaveMedia", "I got an error :", exception);
response = exception.toString();
}
return response.toString();
}
预先感谢您的回复。