gpt4 book ai didi

java - 运行时异常 :cannot serialize: Error to send byte array from android to java application through ksoap

转载 作者:太空狗 更新时间:2023-10-29 15:33:45 25 4
gpt4 key购买 nike

我必须从 Android 设备将字节数组发送到我的 java 应用程序。我在 android 中使用 ksoap2 并且我已经在 java 中使用 axis2 创建了 web 服务以接收该字节数组并在服务器上创建文件以进行进一步处理。

让我给你完整的解释。我正在 android 设备中录制一个 wave 文件,然后该 wave 文件需要发送到服务器上的 java 应用程序。我在 java 应用程序中创建了一个 axis2 名称为“get_wave_byte”,它将传入的字节数组再次转换为 wave 文件并将其存储在服务器中。我从 android 设备发送 wave 文件作为字节数组以及 get_wave_byte() 参数中的存储路径。

为此,我在 android 中创建了 wave 文件,之后我创建了一种将该 wave 文件转换为字节数组的方法。将 wave 文件转换为字节数组的方法如下...

public static byte[] getBytesFromFile(File file) throws IOException {
InputStream is = new FileInputStream(file);

// Get the size of the file
long length = file.length();

// You cannot create an array using a long type.
// It needs to be an int type.
// Before converting to an int type, check
// to ensure that file is not larger than Integer.MAX_VALUE.
if (length > Integer.MAX_VALUE) {
// File is too large
}

// Create the byte array to hold the data
byte[] bytes = new byte[(int)length];

// Read in the bytes
int offset = 0;
int numRead = 0;
while (offset < bytes.length
&& (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
offset += numRead;
}

// Ensure all the bytes have been read in
if (offset < bytes.length) {
throw new IOException("Could not completely read file "+file.getName());
}

// Close the input stream and return bytes
is.close();
return bytes;
}

所以基本上现在我使用以下代码将这些字节数组发送到 java 应用程序...

 File source_for_byte=new File(outFilename);//Here is my wave file 

//创建临时字节数组以将文件存储在字节数组中

 byte[] temp = new byte[(int) source_for_byte.length()];

//然后调用我上面所说的将文件转换为字节数组的方法

temp=getBytesFromFile(source_for_byte);

从这里开始,我使用 ksoap2 调用 java 应用程序方法,其中将那些数组字节作为参数,并将字符串作为文件路径,使用 get_wav_byte() 方法存储在服务器上

 String NAMESPACE = "http://test.com";
String SOAP_ACTION = NAMESPACE + METHOD_NAME;
// NAMESPACE + method name
final String URL = "http://192.168.3.106:8080/axis2/services/speechmain?wsdl";

METHOD_NAME = "get_wav_byte";
try {
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("wavbite",temp);

request.addProperty("path", "D:\\sound\\latest_recognizer.wav");
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.call(SOAP_ACTION, envelope);
Object result = envelope.getResponse();
((TextView) findViewById(R.id.gettext1)).setText("NUMBER IS :-> "
+ result.toString());

} catch (Exception E) {
E.printStackTrace();
((TextView) findViewById(R.id.gettext1)).setText("ERROR:"
+ E.getClass().getName() + ":" + E.getMessage());
}

而我的 java Application 方法是我从 android 调用如下...

 public int get_wav_byte(byte[] wavbite,String path){

try
{
File dstFile = new File(path);
FileOutputStream out = new FileOutputStream(dstFile);
out.write(wavbite, 0, wavbite.length);
out.close();
}
catch (IOException e)
{
System.out.println("IOException : " + e);
}

return 0;
}

我的问题是当我运行我的 android 应用程序来调用这个 web 服务时它给我以下错误

 java.lang.runtimeexception:cannot serialize:[B@40781280]

还有一件事我想告诉大家,我正在使用以下代码从我的 .net 应用程序调用相同的 Java 方法。

static void Main(string[] args)
{
byte[] byteArrayFile = File.ReadAllBytes("D:/Projects/ConsoleApplication1/ConsoleApplication1/1347452692320.wav");

String mypath="D:\\sound\\bhavik_latest_copy_recorded.wav";


short[] shortwave=ConvertBytesToShorts(byteArrayFile);
Speech_service.speechmainPortTypeClient obj = new Speech_service.speechmainPortTypeClient();

obj.get_wav_byte(byteArrayFile,mypath);
}

而且它像 Champ 一样简单地工作并轻松存储我的 wave 文件

那么我的 android 代码中出现错误的问题是什么。

你能告诉我哪里出了问题吗?

提前致谢。

最佳答案

好的。我已经用

解决了我的错误
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);

new MarshalBase64().register(envelope); // serialization

关于java - 运行时异常 :cannot serialize: Error to send byte array from android to java application through ksoap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12389105/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com